2014-02-18 115 views
1

我想删除存储在PostgreSQL 8.3.8 32位中的一个表。删除PostgreSQL中的空名称表

奇怪的是,我的表没有名称,它是空的。我在哪里:

SELECT * FORM pg_catalog.pg_tables; 

它说我的表名是空的。 当我试图删除我的表:

DROP TABLE sde. ; 

其中SDE是我SCHEMANAME,出现 错误,告诉我,有一个语法错误。

ERROR: syntax error at or near ";" 
LINE 1:drop table sde. ; 

有没有什么办法删除该表?

我也试过出现

DROP TABLE sde.''; 

但还是错误。

我的表格有OID。有没有可能通过OID删除它?

对我来说最好的解决方案是重命名该表,以便我可以从该表中保存数据。

+0

对象名称需要双引号,而不是单个qutoes。尝试:'drop table sde。“”;' –

+0

如果我插入双引号,则会出现错误:'ERROR:零长度分隔标识符在或接近“”“”“ LINE 1:DROP TABLE sde。”“;' – user2919480

+2

也许你的tablename只包含空格? (所以它不是空的,但是例如一个或几个空格) –

回答

1

不能创建空名称表:

tgr=# create table ""(); 
ERROR: zero-length delimited identifier at or near """" 
LINE 1: create table ""(); 

但是,您可以创建一个表有很多的空间,包括换行:

create table "    

        "(); 

要使用这样的工作表中:

  1. information_schema.tables找到它
  2. 复制/粘贴某些命令中的表名使用双引号(“”)

当以前失败时,可以尝试直接更新pg_class。如果您有表格OID,请尝试以下操作:

update pg_class set relname = 'test'::name where oid = <<YourOID>>; 
+0

我在'information_schema.tables'中找到它,它的名字看起来像这个''''。我复制了它并添加了双引号:'DROP TABLE sde。“''”;'。但是出现错误告诉我'table'''“不存在'。 – user2919480

+0

我明白了。在9.1.9中没问题:'create table sda。'''“(); drop table sda。“''”;'也许这是旧的PostgreSQL版本中的一些错误。 –

+0

您是否在pgAdmin中看到此表?如果是的话,那么你可以从那里重新命名''''表。右键单击表名,然后单击属性。这也适用于我。 –

相关问题