Как создать скрипт с Postgresql для параметризации начального значения последовательности

Я новичок в Postgres. Я использую Pgadmin III, и мне нужно параметризовать значение в заявлении "изменить последовательность". Я попытался выполнить этот код:

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.

2 ответа

Решение

Для установки значения для последовательности вручную, вы можете использовать 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;
Другие вопросы по тегам