在PostgreSQL中创建表时,会创建表,但列不是

时间:2012-11-13 17:27:16

标签: sql postgresql ddl

当我运行以下语句时,表被创建,但没有 列:

CREATE TABLE "mod_1237" ("Collecteddepth" float8 NOT NULL, "Collectedtime"
float8 NOT NULL, "CollectedData" Varchar(45) NOT NULL, "Collectedpass"
float8 NOT NULL, "Collectedmodtime" float8 NOT NULL) WITH (OIDS = FALSE);

我知道我没有创建主键,但这不应该阻止生成列。当我运行此代码时,它也不会产生任何错误,所以一切都很好,直到我尝试写入表。有关为什么这不起作用或如何使用给定列创建表的任何想法?

我在Windows Server Standard SP2上使用PostgreSQL版本9.1.4

2 个答案:

答案 0 :(得分:1)

这是由Hubert(“Depesz”)在PostgreSQL邮件列表where the question was cross-posted上回答的。供在此阅读的任何人参考,here is the answer。既然它还没有被添加到档案中,那么这个链接将会有一段时间,所以我将在下面重现赫伯特的答案:


  

很可能你插入了如下:

insert into mod_1237 (Collecteddepth) values (...)
     

即。你没有引用列名。因此问题。

     

在psql中,你可以这样做:

\d mod_1237
     

你会看到列在那里。

     

致以最诚挚的问候,

     

depesz

换句话说:如果在表定义中双引号,则在引用它们的地方双引号。

这是一个FAQ;见:

等等。

答案 1 :(得分:0)

只需删除引号,因为它们不需要。

CREATE TABLE mod_1237 (Collecteddepth float8 NOT NULL, Collectedtime float8 NOT NULL, CollectedDate Varchar(45) NOT NULL, Collectedpass float8 NOT NULL, Collectedmodtime float8 NOT NULL) WITH (OIDS = FALSE);