在Postgres中修改多个表

17 浏览
0 Comments

在Postgres中修改多个表

我有多个表格,想要执行以下操作:\n

ALTER TABLE table_one
DROP COLUMN id,
ADD id SERIAL PRIMARY KEY;

\n有没有办法一次性完成?

0
0 Comments

在Postgres中,有时候需要同时修改多个表的结构,其中一个常见的需求是为每个表创建序列并为id列添加默认值。下面的代码展示了如何实现这个需求:

do $$

declare maxid int;

begin

select coalesce(max(id)+1, 1) from table1 into maxid;

execute 'create sequence table1_id_seq START WITH '||maxid ;

alter table table1 alter column id set default nextval('table1_id_seq');

select coalesce(max(id)+1, 1) from table2 into maxid;

execute 'create sequence table2_id_seq START WITH '||maxid ;

alter table table2 alter column id set default nextval('table2_id_seq');

end;

$$ language plpgsql

上述代码中,首先声明了一个变量maxid用于存储最大的id值。然后通过查询获取表table1的最大id值,并将其加1,如果最大id值为空,则设置为1。接下来,使用execute语句执行动态SQL语句,创建名为table1_id_seq的序列,并设置起始值为maxid。最后,通过alter table语句修改表table1的id列的默认值为序列table1_id_seq的下一个值。同样的步骤也适用于表table2。

这段代码的目的是为了解决同时修改多个表结构的需求,通过创建序列和设置默认值,可以方便地为每个表的id列生成唯一的值。这种方式不仅简单高效,而且可以确保数据的完整性和唯一性。

0