Вашей первой ошибкой было создание таблицы с именем check
, которое является зарезервированным ключевым словом .
create table check( id int primary key);
ERROR: syntax error at or near "check"
LINE 1: create table check( id int primary key);
Вы или кто-то другой, должно быть, обошли это, цитируя это.
create table "check"( id int primary key);
Таким образом, это создаст ограничение первичного ключа с именем "check_pkey"
.
Ваш метод извлечения кавычек из regclass
звучит не как правильное решение, а скорее как обходной путь.
Поскольку вам необходимо текстовое представление regclass
, вы просто запрашиваете pg_class
.
create or replace function make_bi_temporal( _tbl regclass )
returns void as $$
declare
l_relname pg_class.relname%type;
BEGIN
select relname||'_pkey' into l_relname from pg_class where oid = $1;
execute format( 'alter table %s drop constraint if exists %s',$1,l_relname);
END $$ language plpgsql;
DEMO