cul*_*oly 1 sql sql-server postgresql
CREATE TABLE [dbo].[Addresses](
[Id] [int] IDENTITY(1,1) NOT NULL,
[UserId] [int] NULL,
[City] [nvarchar](50) NULL,
[State] [nvarchar](50) NULL,
[CountryCode] [nvarchar](50) NULL,
[PostalCode] [nvarchar](50) NULL,
[Street1] [nvarchar](50) NULL,
[Street2] [nvarchar](50) NULL,
PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
基于以前的MSSQL创建脚本,等效的PostgreSQL表创建脚本会是什么样子?寻找可以指导我将MSSQL架构转换为PostgreSQL的方法/资源...
a_h*_*ame 16
菲尔的回答是正确的.正如您还要求" for a approach ",这里有一个非常简短的描述来转换Microsoft T-SQL:
;(一般:更换GO用;) -不,该;不会没有在前面走with的关键字为一个共同的表表达式[..](我强烈建议永远不要使用带引号的标识符).有关标识符语法的详细信息,请参见手册serial或bigserial在Postgres中.这意味着数据类型integer或者bigint所以你只需要关键字serial.有关详细信息,请参阅手册nvarcharPostgres 没有.所有字符列都使用相同的字符集.要转换的其他数据类型(不完整!):
SQL Server Postgres
---------------------------
image bytea
binary bytea
varbinary(max) bytea
varchar(max) text
nvarchar(max) text
text text
ntext text
bit boolean
datetime timestamp
smalldatetime timestamp
timestamp no equivalent
uniqueidentifier uuid
xml xml
Run Code Online (Sandbox Code Playgroud)没有聚簇索引,因此删除该clustered属性
with部分定义了与Postgres无关的表的物理属性dbo模式"映射"到public了在Postgres架构.public除非您更改了架构搜索路径,否则它有点不常见的前缀表(也不需要为SQL Server中需要的函数使用架构前缀)有些事需要注意:
where name = 'Arthur'将返回不同的东西where name = 'arthur'.搜索这个网站,有很多关于此的问题.like '[0-9]')的"穷人的正则表达式"语法在Postgres中不起作用.您需要使用正则表达式运算符.where varchar_column = 2即使该列中只有数字,Postgres也会失败在Postgres中,您可以null在可空列上的唯一索引中插入多个值.以下在SQL Server中失败但在Postgres中有效
create table foo (col1 integer, col2 integer);
create unique index idx_foo on foo (col1, col2);
insert into foo (col1, col2) values (1, null);
insert into foo (col1, col2) values (1, null);
Run Code Online (Sandbox Code Playgroud)这个清单绝不完整!从一个DBMS转换到另一个DBMS时,还有很多要注意的事项.
干得好:
CREATE TABLE Addresses(
Id SERIAL NOT NULL PRIMARY KEY,
UserId int NULL,
City varchar(50) NULL,
State varchar(50) NULL,
CountryCode varchar(50) NULL,
PostalCode varchar(50) NULL,
Street1 varchar(50) NULL,
Street2 varchar(50) NULL
);
Run Code Online (Sandbox Code Playgroud)
SQL小提琴:http://sqlfiddle.com/#!15/b76b6