在 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 = &lt;&lt;YourOID&gt;&gt;;

以上是关于在 PostgreSQL 中删除名称为空的表的主要内容,如果未能解决你的问题,请参考以下文章

选择性过滤列值不为空的行 PostgreSQL

PostgreSQL 按日期过滤条目,但包括未包含日期为空的条目

Pyspark 可为空的 uuid 类型 uuid 但表达式的类型为字符变化

SQL 在 Where 子句中处理可为空的外键

sql进阶-筛选库表中数据为空的表

与从 2 个不为空的表中获取数据相关的数据库查询