在 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 没有行”,不一定没有列。
我想在 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 没有行”,不一定没有列。