如何在PostgreSQL中实现SQL Server自定义code计算列的等效功能?
在PostgreSQL中实现SQL Server自增计算列的等效功能
你要实现的是和SQL Server示例中完全一致的效果:一个自增的id列,加上自动生成格式为P+4位补零id的code计算列。以下是对应的PostgreSQL建表语句:
CREATE TABLE test( id INT GENERATED ALWAYS AS IDENTITY NOT NULL, code TEXT GENERATED ALWAYS AS ('P' || LPAD(id::TEXT, 4, '0')) STORED );
关键部分说明:
GENERATED ALWAYS AS IDENTITY:对应SQL Server的IDENTITY(1,1),自动生成从1起始、步长为1的自增主键值,是PostgreSQL符合SQL标准的自增列实现。LPAD(id::TEXT, 4, '0'):替代SQL Server的RIGHT('0000' + CONVERT(VARCHAR, id), 4),将id转为文本后,在左侧补零至4位长度,确保输出固定4位格式。||:PostgreSQL的字符串连接运算符,作用等同于SQL Server中的+。GENERATED ALWAYS AS (...) STORED:定义计算列,STORED表示计算值会被持久化存储在表中(和SQL Server的PERSISTED计算列一致);如果不需要存储,仅在查询时计算,可替换为VIRTUAL(对应SQL Server默认的非持久化计算列)。
测试验证
插入两条测试数据:
INSERT INTO test DEFAULT VALUES; INSERT INTO test DEFAULT VALUES;
查询结果:
id | code ----+------- 1 | P0001 2 | P0002
内容的提问来源于stack exchange,提问作者Felipe Renovato
相关产品推荐
相关产品推荐

