Nun*_*eto 2 postgresql rename table-rename
我有一个依赖于PostgreSQL系统的数据库,我正在维护它,所以我想更改表和整体方案.为此我想到重命名旧表,所以他们有一个下划线作为前缀.但这不起作用:
DROP TABLE IF EXISTS _my_table; -- table does not exists, this does nothing
ALTER TABLE my_table
RENAME TO _my_table;
Run Code Online (Sandbox Code Playgroud)
查询结果如下:
注意:表"_my_table"不存在,跳过ERROR:
类型"_my_table"已经存在
**********错误**********错误:类型"_my_table"已存在SQL状态:42710
'_my_table'表是假名,但是通过实际创建'_my_table'表并运行上面的相同脚本来重现此错误.
我正在使用pgAdmin III访问数据库表并利用它的"重命名"操作导致相同的错误.alter table方法的postgresql文档没有明确告诉我这个特定的问题:http://www.postgresql.org/docs/9.3/static/sql-altertable.html
我真的需要使用" 备份 "而不是"_" 这样的前缀吗?或者是否可以重命名它,我唯一的兴趣是保持表中的信息,同时对表名进行最小的更改.
您不能简单地在现有表名前面加上下划线,因为每个表都有一个关联类型,即表名之前的前导下划线.您可以在pg_catalog.pg_type表格中验证这一点.让表名以下划线开头不是问题,但内部过程是从旧表中物理创建新表,并且只有当旧表不再被其他进程使用时才会使旧表及其表关联类型,删除.因此引用类型的错误(而不是关系).
因此,如果您真的想要使用下划线保留旧名称,则应首先ALTER TABLE使用某个临时名称,然后ALTER TABLE使用下划线+原始名称.或者只是使用另一个前缀......
| 归档时间: |
|
| 查看次数: |
1424 次 |
| 最近记录: |