PostgreSQL使用新id创建序列

时间:2017-04-27 15:00:35

标签: postgresql

我想为表帐户中创建的每一行创建一个序列,如os_1,os_2等...

如何获取此新行的ID并将其插入序列名称?

CREATE OR REPLACE FUNCTION public.create_os_seq() RETURNS TRIGGER AS $$
    #variable_conflict use_variable
    BEGIN
        --CREATE SEQUENCE seqname;
        EXECUTE format('CREATE SEQUENCE os_', NEW.id);
        return NEW;
    END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER create_os_seq AFTER INSERT ON account FOR EACH ROW EXECUTE PROCEDURE create_os_seq();

表帐户

id INT AUTO_INCREMENT
nane VARCHAR

创建序列后,我会将其编号放在OS表中

表os

id INT
account_id INT

2 个答案:

答案 0 :(得分:0)

根据您的问题,我假设您要处理自我增量值?Postgres使用shortcut SERIAL代替AUTO_INCREMENT,只需创建表格如下:

CREATE TABLE so79 (id bigserial primary key, col text); 

这将自动为您创建序列,并将其值指定为列ID的默认值。基本上会让它像AUTO_INCREMENT一样。您不必使用触发器来增加值...

答案 1 :(得分:0)

无法为每个创建序列是个好主意。相反,请告诉我们您要做的事情。

我的猜测是你需要一个水线指示器,你打算在一些动作上增加一个高点。只需使用整数。

CREATE TABLE foo (
  foo_id     serial,
  max_seen   int
);

现在,您可以对其他表上的触发器执行任何操作,例如增加max_seen