10

我实际上不知道我是怎么做到的:但我在我的 postgres DB 中有一个无名表。不用说这样的表是有问题的,它不会被删除,你也不能以任何方式改变它。

这是它在 pgAdmin explorer 上的外观图片:

无名表

至于它的声明,它是这样的:

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_)
)

所以,一个简单的问题:我怎样才能删除这个表(因为试图删除它涉及到使用它的名字......它不存在!)?

问候。

4

2 回答 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 的内部结构——不要做傻事,风险自负:-)

于 2013-07-13T08:22:14.347 回答
0

我不使用 Postgresql,但我想您可以通过以下步骤删除该表:

  1. 获取 sql 转储
  2. 删除数据库
  3. 从转储中删除该无名表并恢复 sql 转储
于 2013-07-13T09:04:26.540 回答