PostgreSQL 重命名表 - 级联重命名对象,例如包含表名的索引、约束

Tom*_*Tom 5 postgresql

我用以下命令重命名了我的表ALTER TABLE _ RENAME TO _

ALTER TABLE foods RENAME TO food;
ALTER TABLE foods_nutrients RENAME TO food_nutrient;
Run Code Online (Sandbox Code Playgroud)

它有效,但是包含这些表名的其他数据库对象(例如索引、序列和约束)没有更新。所以我必须像这样手动更新它们:

ALTER INDEX foods_pkey RENAME TO food_pkey;
ALTER SEQUENCE foods_id_seq RENAME TO food_id_seq;
ALTER TABLE food_nutrient RENAME CONSTRAINT foods_nutrients_food_id_fkey TO food_nutrient_food_id_fkey;
Run Code Online (Sandbox Code Playgroud)

没有必要重新命名它们,但不这样做感觉不对。我想知道是否有命令可以自动执行此操作。或者重命名所有包含旧表名的对象并不常见?

Seb*_*edl 4

索引、序列等名称与任何表名称之间没有技术关系。所以没有可靠的方法来自动重命名它们。

您可以编写一个脚本来遍历架构并通过搜索和替换来重命名事物,但这会带来误报的风险。