Postgresql中有问题的无名表

时间:2013-07-13 00:27:24

标签: database postgresql postgresql-9.0

我实际上并不知道我是如何做到的:但是我的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 个答案:

答案 0 :(得分: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的内部 - 不要做愚蠢的事情并自行承担风险: - )

答案 1 :(得分:0)

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

  1. 参加sql dump
  2. 删除数据库
  3. 从转储中删除该无名表并恢复sql dump