如何为postgres中表的主键使用的序列设置序列的下一个值?

时间:2016-08-11 13:17:45

标签: postgresql

我有表A.表A拥有一个序列。 我创建了表B,继承自表A. 表A和B现在对其主键列使用相同的默认值。 举一个简单的例子,表A是" person",B是" bulk_upload_person"。

CREATE TABLE "testing"."person" (
  "person_id" serial, --Resulting DDL: int4 NOT NULL DEFAULT nextval('person_person_id_seq'::regclass)
  "public" bool NOT NULL DEFAULT false
);

--SQL Ran
CREATE TABLE "testing"."bulk_upload_person" (
    "upload_id" int4 NOT NULL
)
INHERITS ("testing"."person");

--Resulting DDL
CREATE TABLE "testing"."bulk_upload_person" (
    "person_id" int4 NOT NULL DEFAULT nextval('person_person_id_seq'::regclass),
    "public" bool NOT NULL DEFAULT false,
    "upload_id" int4 NOT NULL
)
INHERITS ("testing"."person");

对于表A,我可以使用pg_get_table_serial_seqence来获取序列。 如果我只了解表B,如何获取然后设置序列的下一个值?我想在值中添加n。

我需要这样做才能一次填充多个相关对象,同时能够知道他们将拥有哪些主要ID,而不必查询我刚刚填充的表来确定ID。 / p>

通过填充,我的意思是在一个语句中插入多行。

insert into "testing"."bulk_upload_person" ( "person_id", "public", "upload_id") values ( '1', 'f', '1'), ( '2', 't', '1'); --etc

我认为我们的情况类似于https://stackoverflow.com/a/8007835/89211,但我们并不想保持锁定,除了获取并设置每个表的序列的下一个值。

目前我们这样做是通过重新表示表B的主键的默认值来获取序列的名称,但感觉可能有更好的方法来实现这一点,我们不会这样做。意识到。

0 个答案:

没有答案