如何使用 Postgresql 创建脚本来参数化序列的起始值
How to create script with Postgresql to parameterize the start value of a sequence
我是 Postgres 的新手。
我使用 Pgadmin III,我需要在 'alter sequence' 的语句中参数化一个值。
我尝试执行此代码:
select coalesce(MAX(ID)+1,1) as max into myTempTable from myTable;
EXECUTE immediate 'ALTER SEQUENCE mySequence INCREMENT BY 1 START WITH ' || max || ' MINVALUE 1 NO CYCLE';
但它不起作用。怎么了?我需要将它封装在一个函数中吗?
谢谢你。
D.
设置值手动排序,可以使用ALTER SEQUENCE seq_name RESTART WITH value
关于你的例子,你需要这样的东西:
CREATE SEQUENCE testseq;
DO $$
DECLARE
maxid INT;
BEGIN
SELECT coalesce(MAX(ID)+1,1) FROM myTable INTO maxid;
EXECUTE 'ALTER SEQUENCE testseq RESTART WITH '|| maxid;
END;
$$ LANGUAGE PLPGSQL
不需要动态SQL。
只需创建序列,然后更改当前值:
create sequence mysequence increment by 1 minvalue 1 no cycle;
select setval('mysequence', (select coalesce(MAX(id)+1,1) from mytable));
您可能还想将该序列设为该列的默认序列:
alter table mytable alter column id
set default nextval('mysequence');
alter sequence mysequence owned by mytable.id;
我是 Postgres 的新手。 我使用 Pgadmin III,我需要在 'alter sequence' 的语句中参数化一个值。 我尝试执行此代码:
select coalesce(MAX(ID)+1,1) as max into myTempTable from myTable;
EXECUTE immediate 'ALTER SEQUENCE mySequence INCREMENT BY 1 START WITH ' || max || ' MINVALUE 1 NO CYCLE';
但它不起作用。怎么了?我需要将它封装在一个函数中吗? 谢谢你。 D.
设置值手动排序,可以使用ALTER SEQUENCE seq_name RESTART WITH value
关于你的例子,你需要这样的东西:
CREATE SEQUENCE testseq;
DO $$
DECLARE
maxid INT;
BEGIN
SELECT coalesce(MAX(ID)+1,1) FROM myTable INTO maxid;
EXECUTE 'ALTER SEQUENCE testseq RESTART WITH '|| maxid;
END;
$$ LANGUAGE PLPGSQL
不需要动态SQL。
只需创建序列,然后更改当前值:
create sequence mysequence increment by 1 minvalue 1 no cycle;
select setval('mysequence', (select coalesce(MAX(id)+1,1) from mytable));
您可能还想将该序列设为该列的默认序列:
alter table mytable alter column id
set default nextval('mysequence');
alter sequence mysequence owned by mytable.id;