我实际上并不知道我是如何做到的:但是我的postgres数据库中有一张无名表。不用说,这样的表是有问题的,它不会被删除,也不会以任何方式改变它。
以下是pgAdmin资源管理器中的外观图片:
关于它的声明,它是这样的:
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_)
)
所以,一个简单的问题:如何删除此表(因为尝试删除它会使用它的名称......它不存在!)?
的问候。
答案 0 :(得分:6)
如果不关于由于编码/字体问题而无法显示名称的表格,您可以这样做:
这当然假设您拥有对数据库的超级用户访问权。
第一步 - 确定目录中的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,但我想你可以按照以下步骤删除该表: