在 postgresql 中创建空 table

Create empty table in postgresql

我想在 postgresql 的数据库中创建一个简单的 table。 从文档中我有 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*;

我以为我得到了一个新的空 table.But psql throws ERROR: syntax error at or near ";"。当我使用像这样的空参数列表时:

CREATE TABLE *table_name*();

psql 告诉我 table 是通过

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

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

一小时前我建议至少添加一列,如下所示:

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

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

您可以有一个 table 没有列,甚至其中有一些行:

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)

您似乎混淆了术语 数据库table

But \l is not showing the newly created table.

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

And its also not possible to login with psql -d table_name -U user_name

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

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

看来你必须使用括号:

postgres=# CREATE TABLE t ();
CREATE TABLE

要插入一行:

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

计算您插入的行数:

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

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

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

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