在postgres中使用变量和表名正确格式化执行变更

时间:2016-06-25 18:37:58

标签: sql postgresql

我正在尝试在alter table上执行以将列分配给序列nextval以进行自动增量,但似乎无法弄清楚如何执行此最后一部分。序列创建正常,所有者都已签名,table_a.idtable_a_id_seq的所有者。我已经创建了table_a_id_seq

在postgres sql函数中,如何正确格式化。

我试过了:

EXECUTE format('ALTER TABLE ONLY %s ALTER COLUMN id SET DEFAULT nextval($1::regclass)', new_table_name) USING new_seq_name;

但是它说$ 1并没有指向new_table_seq_name。 我也试过了:

EXECUTE format('ALTER TABLE ONLY %s ALTER COLUMN id SET DEFAULT nextval("%s"::regclass)', new_table_name, new_seq_name);

但它告诉我序列不存在,这让我想知道它是否需要在这个语句分隔的事务后面。

如何在new_table_name成功执行此更改?谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

使用the format specifier %L作为文字:

EXECUTE format(
    'ALTER TABLE ONLY %s ALTER COLUMN id SET DEFAULT nextval(%L::regclass)', 
    new_table_name, 
    new_seq_name);