PostgreSQL中存在问题的匿名表

10

实际上我不知道如何做到的:但是我在我的Postgres数据库中得到了一个无名表。不用说,这样的表是有问题的,它不能被删除,也不能以任何方式进行更改。

这是pgAdmin浏览器中它的外观图片:

nameless table

至于它的声明,就像这样:

CREATE TABLE 
(
  _id_ integer NOT NULL DEFAULT nextval('bu_b__id__seq'::regclass),
  pt_utilisateur integer,
  pt_date date,
  lon double precision,
  lat double precision,
  CONSTRAINT  PRIMARY KEY (_id_)
)

所以,一个简单的问题:我该如何删除这个表格(尝试删除它会使用它的名称...但它并不存在!)?

敬礼。

2个回答

6
如果这不是关于因编码/字体问题而无法显示表名的情况,您可以进行以下操作:
  • 从系统目录中确定表OID。
  • 在系统目录中设置一个新的表名为临时名称。使用OID作为标识符
  • 重新命名表格为实用名称(或仅将其删除)。
当然,这假设您具有对数据库的超级用户访问权限。
第一步-从目录中确定OID:
SELECT oid, relname FROM pg_class WHERE length(relname) <= 1;

如果您没有获得任何结果,那么这个表格一个名称 - 只是不能显示。在这种情况下,只需跳过WHERE部分,用肉眼查看。
第二步 - 更改系统目录:
UPDATE pg_class SET relname = 'foo' WHERE oid = /*OID from step 1*/;

无论如何——不要停在这里,你必须继续前进。

第三步——清理

PostgreSQL 在多个位置(例如pg_type)存储表名。有些工具可能依赖于此。为了清理这个问题,你必须要么删除表格(并因此删除未重命名的内容),要么使用官方工具再次将表格重命名。

ALTER TABLE foo RENAME TO /*somthing real*/;

或者

DROP TABLE foo;

一般的警告:您正在深入了解PostgreSQL的内部 - 不要做傻事,并自行承担风险 :-)


0

我不使用Postgresql,但我猜您可以按照以下步骤删除该表:

  1. 获取SQL转储
  2. 删除数据库
  3. 从转储中删除该无名表并还原SQL转储

"取出数据库备份",意思是? - Akheloes
@Gloserio,这是关于备份的内容 http://www.postgresql.org/docs/8.1/static/backup.html - shweta
@shweta 哈哈,是时候跟 PostgreSQL 伙伴打个招呼了 :) - user2511414

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接