在 PostgreSQL 中删除名称为空的表
Posted
技术标签:
【中文标题】在 PostgreSQL 中删除名称为空的表【英文标题】:Delete table with empty name in PostgreSQL 【发布时间】:2014-02-18 09:43:25 【问题描述】:我正在尝试删除存储在 PostgreSQL 8.3.8 32 位中的一张表。
奇怪的是我的桌子没有名字,它是空的。我在哪里:
SELECT * FORM pg_catalog.pg_tables;
它说我的表名是空的。 当我尝试删除我的表时:
DROP TABLE sde. ;
sde 是我的模式名, 出现错误,告诉我有语法错误。
ERROR: syntax error at or near ";"
LINE 1:drop table sde. ;
有什么办法可以删除那个表吗?
我也试过了
DROP TABLE sde.'';
但仍然出现错误。
我的表有 OID。是否可以通过 OID 删除?
对我来说最好的解决方案是重命名该表,以便我可以保存该表中的数据。
【问题讨论】:
对象名称需要双引号,而不是单引号。试试看:drop table sde."";
如果我插入双引号出现错误:ERROR: zero-length delimited identifier at or near """" LINE 1: DROP TABLE sde."";
也许你的表名只包含空格? (所以它实际上不是空的,而是例如一个或几个空格)
【参考方案1】:
你不能用空名创建表:
tgr=# create table "" ();
ERROR: zero-length delimited identifier at or near """"
LINE 1: create table "" ();
但是您可以创建一个包含很多空格的表格,包括换行符:
create table "
" ();
要使用这样的表:
-
在
information_schema.tables
中找到它
在某些命令中用双引号 ("") 复制/粘贴表名
当前面失败时,可以尝试直接更新pg_class
。如果你有表 OID,试试这个:
update pg_class set relname = 'test'::name where oid = <<YourOID>>;
【讨论】:
我在information_schema.tables
找到它,它的名字看起来像这样''
。我复制了它并添加了双引号:DROP TABLE sde."''";
。但出现错误告诉我table "''" does not exist
。
我明白了。在 9.1.9 中这没问题:create table sda."''"(); drop table sda."''";
也许这是旧 PostgreSQL 版本中的一些错误。
你在 pgAdmin 中看到这个表了吗?如果是,那么您可以从那里重命名 ''
表。右键单击表名,然后单击属性。这也适用于我。
是的,我看到了,但是当我尝试删除它时,会出现消息窗口:ERROR: syntax error at end of input. LINE 1: drop table sde.
直接更新pg_class
怎么样?我不确定这是否会产生一些副作用,但它对我有用。如果您有 OID,则:update pg_class set relname = 'test'::name where oid = <<YourOID>>;
以上是关于在 PostgreSQL 中删除名称为空的表的主要内容,如果未能解决你的问题,请参考以下文章
PostgreSQL 按日期过滤条目,但包括未包含日期为空的条目