【问题标题】:Create empty table in postgresql在 postgresql 中创建空表
【发布时间】:2015-09-28 02:17:34
【问题描述】:

我想在 postgresql 的数据库中创建一个简单的表。 从文档中我有CREATE TABLE will create a new, initially empty table in the current database. The table will be owned by the user issuing the command. 用这个命令

CREATE TABLE *table_name*;

我以为我得到了一个新的空表。但是 psql 抛出 ERROR: syntax error at or near ";"。当我使用一个空的参数列表时:

CREATE TABLE *table_name*();

psql告诉我表是通过

创建的
postgres=# create table *table_name*();
CREATE TABLE

但是 \l 显示没有显示新创建的表。而且它也无法使用 psql -d table_name -U user_name 登录。有人可以帮忙吗?

【问题讨论】:

  • 你真的需要一个没有列的表吗?通常将 empty 表称为没有记录的表。没有柱子的有点奇怪。
  • 您必须添加列。或者因为你使用 Rails,所以用迁移来做。如果你有一个想要集成的现有数据库,你会想使用原始 SQL。
  • rails 也可以通过rake db:create 或其他方式为您创建数据库。
  • 哦,太好了,我不知道。我一定会检查出来

标签: postgresql create-table


【解决方案1】:

一个小时前,我建议至少添加一个这样的列:

create table tab1 (columnname varchar(42) not null)

但正如评论员刚刚所说,这似乎没有必要。 (我考虑将错误的答案保留在这里而不是删除它,以防止其他人提出相同的建议)

【讨论】:

  • 这不是一个真正的答案,除非您实际上添加了一个代码块来向您展示如何添加列,这充其量只是对操作的讽刺挖掘,您可以在cmets,没有把它作为答案
  • 我刚刚测试了使用混合服务器类型 (HeidiSQL) 的数据库客户端创建一个无列表,它总是阻止生成没有列的表。无论如何,我不知道有用地使用不包含列的表,使它们能够在其中携带数据。但是感谢您的反对票.. 还有 2 个我可以获得同行压力徽章-.-
  • 我添加了一个添加列的代码块...我不知道 Stackoverflow.SE 上的答案必须始终包含代码块的规则。对不起。
  • 有一个规则,一个答案就是一个答案。如果你问一个问题,人们会回答“你做错了”吗?
  • 您实际上可以在 Postgres 中创建一个没有列的表。 create table empty(); 工作得很好。
【解决方案2】:

你可以有一个没有列的表,甚至可以有一些行:

CREATE TABLE nocolumn (dummy INTEGER NOT NULL PRIMARY KEY)
    ;

INSERT INTO nocolumn(dummy) VALUES (1);

ALTER TABLE nocolumn
        DROP COLUMN dummy;

\d nocolumn

SELECT COUNT(*) FROM nocolumn;

输出:

CREATE TABLE
INSERT 0 1
ALTER TABLE
   Table "tmp.nocolumn"
 Column | Type | Modifiers 
--------+------+-----------

 count 
-------
     1
(1 row)

【讨论】:

    【解决方案3】:

    您似乎混淆了数据库这两个术语

    但是\l 没有显示新创建的表。

    当然\l 不会向您显示该表,因为\l 将列出数据库 而不是关系。要查看所有表格,您需要使用 \d\dt

    而且也无法使用psql -d table_name -U user_name登录

    当然这是不可能的,因为-d参数用来指定一个数据库,而不是一个

    【讨论】:

      【解决方案4】:

      我不确定为什么其他答案建议创建一个包含一列的表,然后忽略该列。这当然是可能的,但它似乎与您尝试做的不同。

      看来你必须使用括号:

      postgres=# CREATE TABLE t ();
      CREATE TABLE
      

      插入一行:

      postgres=# INSERT INTO t DEFAULT VALUES;
      INSERT 0 1
      

      要计算您插入的行数:

      postgres=# SELECT FROM t;
      --
      (2 rows)
      

      您不能删除单行,因为所有行都是相等的。但是要完全清空表格,您可以使用DELETE 而不使用WHERE,或TRUNCATE TABLE

      您可以在此处找到更多信息:PostgreSQL: Tables without columns

      也就是说,我不得不说我将“空表”理解为“没有行的表”,不一定没有列。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-07
        • 1970-01-01
        • 1970-01-01
        • 2011-09-11
        • 1970-01-01
        • 1970-01-01
        • 2016-06-25
        • 2021-09-20
        相关资源
        最近更新 更多