如何将指定MS SQL数据库与登录创建语句转换为PostgreSQL语句
MS SQL 转 PostgreSQL 语句转换
1. 创建数据库(如果不存在)
原MS SQL语句:
if not exists(select * from sys.databases where name = '{0}') create DATABASE [{0}]
对应的PostgreSQL语句(PostgreSQL 11+支持简化语法):
CREATE DATABASE IF NOT EXISTS "{0}";
如果需要兼容PostgreSQL 10及更早版本,可用PL/pgSQL的DO块实现:
DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_database WHERE datname = '{0}') THEN CREATE DATABASE "{0}"; END IF; END $$;
2. 创建Windows登录(如果不存在)
原MS SQL语句:
if not Exists (SELECT name FROM sys.server_principals WHERE name = '{0}') BEGIN CREATE LOGIN [{0}] FROM WINDOWS END
PostgreSQL中,Windows域/本地用户需创建对应登录角色,转换语句如下:
DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = '{0}') THEN CREATE ROLE "{0}" LOGIN; END IF; END $$;
注意:
- 若用户名包含反斜杠、空格等特殊字符,必须用双引号包裹,否则PostgreSQL会自动转为小写并引发错误
- 需确保PostgreSQL服务已配置支持Windows身份验证,通常在
pg_hba.conf中设置sspi认证规则
内容的提问来源于stack exchange,提问作者113_Ashish shah
相关产品推荐
相关产品推荐

