drm*_*wer 5 sql postgresql ddl automation sql-update
我的表有以下格式的一堆列:
_settingA
_settingB
_settingB
Run Code Online (Sandbox Code Playgroud)
我想重命名它们只是添加一个前缀,如下所示:
_1_settingA
_1_settingB
_1_settingC
Run Code Online (Sandbox Code Playgroud)
实现这一目标的最快捷/最有效的方法是什么?
编辑:我要补充一点,我有很多超过三列以这种方式重新命名.如果我只有三个,我会一个接一个地手动完成.并感谢你无论你是谁.
没有单一的命令方式。很明显,你可以输入多个命令对应的RENAME通过你的自我,但让我intoduce一些改进:)正如我在说这个答案
...对于所有此类批量管理操作,您可以使用PostgreSQL系统表为您生成查询,而无需手动编写查询
您的情况是:
SELECT
'ALTER TABLE ' || tab_name || ' RENAME COLUMN '
|| quote_ident(column_name) || ' TO '
|| quote_ident( '_1' || column_name) || ';'
FROM (
SELECT
quote_ident(table_schema) || '.' || quote_ident(table_name) as tab_name,
column_name
FROM information_schema.columns
WHERE
table_schema = 'schema_name'
AND table_name = 'table_name'
AND column_name LIKE '\_%'
) sub;
Run Code Online (Sandbox Code Playgroud)
这将为您提供一组字符串,这些字符串是SQL命令,例如:
ALTER TABLE schema_name.table_name RENAME COLUMN "_settingA" TO "_1_settingA";
ALTER TABLE schema_name.table_name RENAME COLUMN "_settingB" TO "_1_settingB";
...
Run Code Online (Sandbox Code Playgroud)
如果您的表在模式中,则无需使用table_schemain WHERE子句public。还请记住使用功能quote_ident() -阅读我的原始答案以获取更多说明。
编辑:
我已经更改了查询,因此现在它可用于名称以下划线开头的所有列_。因为下划线是SQL模式匹配中的特殊字符,所以我们必须对它进行转义(使用\)以准确地找到它。
| 归档时间: |
|
| 查看次数: |
2494 次 |
| 最近记录: |