我有一个名为SEQ_TABLE的表,其中有两列,SEQ_NAME和ID
SEQ_NAME | ID
----------------------
SEQ_TABLE_10 | 1
SEQ_TABLE_20 | 5
其中ID是TABLE_10和TABLE_20的COLUMN_1的最大值
现在,我必须通过从SEQ_TABLE获取序列的nextvalue将新记录插入到TABLE_10中。
我已经编写了如下PostgreSQL查询:
INSERT INTO TABLE_10 (COLUMN_1, COLUMN_2, COLUMN_3) VALUES ((SELECT nextval(SEQ_TABLE)), 'Bangalore' ,NULL);
当我执行上述查询时,出现以下错误:错误
ERROR: column "SEQ_TABLE_10" does not exist
SQL state: 42703
Character: 99
但是,以下查询在MySQL数据库中运行良好:
INSERT INTO TABLE_TABLE(COLUMN_1, COLUMN_2, COLUMN_3) VALUES ((SELECT nextval('TABLE_172_SEQ','true')), 'Bangalore' ,NULL);
什么是在PostgreSQLDB中实现此功能的确切Postgres查询?
2条答案
按热度按时间frebpwbc1#
您要创建一个序列,而不是一个表(SEQ_TABLE)请参考此链接https://www.postgresql.org/docs/8.1/static/sql-createsequence.html
qni6mghb2#
在当前的PostgreSQL版本中,您将使用标识列:
这将隐式生成一个序列。不允许将数字插入到
id
中,但必须或
并且
id
被自动填充以来自序列的下一个值。在旧版PostgreSQL上,您可以使用
serial
或bigserial
:然后
id
的类型为integer
,创建序列table_10_id_seq
,并将nextval
调用添加到id
列的DEFAULT
子句。您可以使用
psql
中的\d
来检查此情况:此外,序列属于该表,删除该表时将自动删除该序列。
插入行时省略
id
列,如下所示:然后将使用
DEFAULT
值。如果你想“步行”做同样的事情,例如对序列使用不同的名称或不同的起始值,那将像这样工作: