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]
基于以前的MSSQL创建脚本,等效的PostgreSQL表创建脚本会是什么样子?寻找可以指导我将MSSQL架构转换为PostgreSQL的方法/资源......
答案 0 :(得分:15)
;
结束语句(一般情况下:将GO
替换为;
) - 不,;
不转到公共表表达式的with
关键字前面[..]
(我强烈建议从不使用带引号的标识符)。有关标识符语法are in the manual serial
或bigserial
。这意味着数据类型为integer
或bigint
,因此您只需要关键字serial
。有关详细信息see the manual nvarchar
。所有字符列都使用相同的字符集。 要转换的其他数据类型(不完整!):
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
没有聚集索引,因此请删除clustered
属性
with
部分定义了与Postgres dbo
架构“映射”到Postgres中的public
架构。除非您更改了架构搜索路径(也不需要为SQL Server中需要的自己的函数使用架构前缀),但public
有一些不常见的前缀表。需要注意的一些事项:
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);
此列表并不完整!从一个DBMS转换到另一个DBMS时,需要注意更多批次。
答案 1 :(得分:6)
你走了:
module Queue where
data Queue a = Q[a] deriving Show
class QDS q a where
pop :: q a -> (a, q a)
push :: q a -> a -> q a
lengthQS :: q a -> Int
isEmpty :: q a -> Bool
instance QDS Queue a where
pop (Q (x:xs)) = (x, (Q xs))
push (Q x) a = (Q (x ++ [a]))
lengthQS (Q x) = length x
isEmpty q = lengthQS q == 0 -- This line fails