Как создать скрипт с 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;