【问题标题】:When creating a table in PostgreSQL, the table is created, but the columns aren't [duplicate]在 PostgreSQL 中创建表时,表已创建,但列不是 [重复]
【发布时间】:2012-11-13 17:27:15
【问题描述】:

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

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

【问题讨论】:

标签: sql postgresql ddl


【解决方案1】:

Hubert(“Depesz”)在 PostgreSQL 邮件列表 where the question was cross-posted 上回答了这个问题。供任何在这里阅读的人参考,here is the answer。由于尚未将其添加到档案中,该链接将在一段时间内出现 404,因此我将在下面复制 Herbert 的答案:


很可能你确实插入了这样的内容:

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

即你没有引用列名。于是就有了问题。

在 psql 中,你可以这样做:

\d mod_1237

你会看到列在那里。

最好的问候,

depesz

换句话说:如果您在表定义中使用双引号,请在您引用它们的任何地方也使用双引号。

这是一个常见问题解答;见:

还有更多。

【讨论】:

    【解决方案2】:

    去掉不需要的引号。

    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);
    

    【讨论】:

    • 如果某些其他软件将使用"Collecteddepth" 作为列名,则引号是必需的。
    • 我不能去掉引号,因为需要字母大小写。上面的示例只是一个示例,但它给我带来了与我实际尝试创建的表相同的问题。还有其他想法吗?
    猜你喜欢
    • 2018-06-25
    • 1970-01-01
    • 2012-04-07
    • 2017-06-08
    • 1970-01-01
    • 2011-02-04
    • 2017-10-24
    • 2017-11-15
    相关资源
    最近更新 更多