【发布时间】:2016-10-28 09:52:40
【问题描述】:
在 PostgreSQL 中,我想创建一个带有自动增量列的表,其中用户无法指定自定义值。
在 Oracle 中,您有两种创建自动递增列的方法。
在第一个示例中,如果用户不指定值,则 id 列会自动递增。这是 SERIAL 在 postgres 中的当前实现。
CREATE TABLE identity_test_tab (
id NUMBER GENERATED BY DEFAULT AS DENTITY,
description VARCHAR2(30)
);
在下一个示例中,id 列总是自动递增,用户不能指定任何其他值。
CREATE TABLE identity_test_tab (
id NUMBER ALWAYS AS IDENTITY,
description VARCHAR2(30)
);
我想知道 postgres 中第二个例子的等价物吗?
【问题讨论】:
-
您需要一个触发器来执行此操作。
-
触发器应“重写”序列中的值,尽管用户定义了值。顺便说一句 - 这种行为会给用户带来他的值被接受的错觉,而触发器会消耗序列中的值
-
@VaoTsun:如果用户提供了值,您总是可以在触发器中抛出异常
-
是的,但随后行没有进入表格。大多数应用程序都会忽略发出通知
-
@VaoTsun:不,引发异常将中止事务。应用程序不能忽略它。看我的回答
标签: database oracle postgresql