提出的问题和回答:
我们很多人都知道,PostgreSQL 不支持
describe table
或 describe view
。从 google 中可能会发现,PostgreSQL 使用 \d+
来代替。
但是,如果使用 PgAdmin 访问 PostgreSQL(我实际上使用的是 PgAdmin3),则
\d+
不起作用。相反,人们会做什么?
这个问题是我在玩PgAdmin3中的查询工具时想到的。我有一个“好吧,呃!”当我想看看 PgAdmin3 的主窗口以及该窗口左侧的树时。下
<servername>
-> <databasename>
-> Schemas
-> <schemaname>
-> Tables
是我的桌子列表, 单击表名称会显示文本 非常像
\d+
向我展示的内容。
因此,为了其他没有立即发现这一点的人的利益,这里有一个答案。
PostgreSQL 还支持标准 SQL 信息模式来检索数据库中对象的详细信息。
即要获取列信息,您可以查询
information_schema.columns
视图:
SELECT *
FROM information_schema.columns
WHERE table_name = '<YourTableName>';
一定要用单引号,双引号不行
请在此处查看有关信息模式的 PostgreSQL 具体详细信息。
psql 的 \d 命令向数据库发送一组查询以询问模式,然后打印结果。
如果您希望能够直接通过 SQL 提取类似的信息,您可以使用“-E”psql 选项来让它显示这些查询。
话虽如此,psql 使用内部 Postgresql 目录表,而不是标准化的“information_schema”模式(请参阅 garethflowers 的答案)。因此,如果您关心可移植性,或者甚至保证它从一个版本到下一个版本都能继续工作,您可能应该使用 information_schema。
以及直接来自 bash shell 的:
psql -d "$db_name" -c '
SELECT
ordinal_position , table_name , column_name , data_type , is_nullable
FROM information_schema.columns
WHERE 1=1
AND table_name = '\''my_table'\''
;'
# or just the col names
psql -d "$my_db" -t -c \
"SELECT column_name FROM information_schema.columns
WHERE 1=1 AND table_name='my_table'"
要获取描述查询将返回的完整视图,请右键单击感兴趣的关系/表并选择“属性...”,然后使用提供的窗口中的“列”选项卡。
唯一的区别是该窗口不提供有关外键关系的信息。
请参阅下面 Gareth Flowers 的回答:
SELECT *
FROM information_schema.columns
WHERE table_name = '<YourTableName>';
而且一定要使用你的表的小写名称...
您可以使用以下命令: \d 表_名称