Итак, я перенес свою базу данных с SQLite на Postgres 12 с помощью pgloader 3.4.1, и по какой-то причине столбцы PK во всех таблицах не являются последовательными / автоматически увеличиваются. Они проиндексированы как NOT NULL (правильные) и bigint или int (правильные), но они не содержат значения по умолчанию, поэтому мне нужно вручную изменить их на тип IDENTITY.
Однако мне нужно оставьте в покое некоторые столбцы PK varchar.
До сих пор я пробовал это в psql:
do
$$
declare
l_rec record;
l_sql text;
l_table text;
begin
for l_rec in select table_schema, table_name, column_name, data_type, is_nullable
from information_schema.columns
where data_type in ('bigint', 'integer')
and is_nullable = 'NO'
and is_generated = 'NO'
and is_identity = 'NO'
loop
l_sql := format('alter table %I.%I alter %I add generated always as identity',
l_rec.table_schema,
l_rec.table_name,
l_rec.column_name);
execute l_sql;
l_table := concat(quote_ident(l_rec.table_schema), '.', quote_ident(l_rec.table_name));
l_sql := format('select setval(pg_get_serial_sequence(%L, %L), max(%I)) from %I.%I',
l_table,
quote_ident(l_rec.column_name),
l_rec.column_name,
l_rec.table_schema,
l_rec.table_name);
execute l_sql;
end loop;
end;
$$
;
Он выплевывал «DO», поэтому я предполагаю, что это должно сработать, но когда я использую \d table_name
для просмотра схемы, он все равно не имеет значения по умолчанию.
Помогите, пожалуйста?