PgAdmin3中“describe table”的等效命令是什么?

26

问题已问并得到回答:

正如我们中的许多人所知,PostgreSQL不支持describe tabledescribe view。 从谷歌上可以找到,PostgreSQL使用\d+代替。

然而,如果一个人使用PgAdmin(我实际上正在使用PgAdmin3)访问PostgreSQL,则\d+不起作用。那么应该怎么办呢?

当我在PgAdmin3的查询工具中尝试时,我思考了这个问题。当我想要查看PgAdmin3主窗口以及该窗口左侧的树时,我有了一个“嗯,明白了!” 的瞬间。 在

<servername>
-> <databasename>
-> Schemas
-> <schemaname>
-> Tables

这是我的表格清单,点击表格名称后,它会显示与\d+类似的文本。

因此,为了让其他人不必像我一样费力地探索,这是一个答案。


1
严格来说,“psql” 使用“\dt”; PostgreSQL 服务器后端并没有这个功能,但它提供了“information_schema”视图。 - Craig Ringer
6个回答

50

PostgreSQL还支持标准的SQL信息模式来检索数据库中对象的详细信息。

例如,要获取列信息,可以查询information_schema.columns视图:

SELECT *
FROM information_schema.columns
WHERE table_name = '<YourTableName>';

请确保使用单引号,双引号无法正常工作

有关信息模式的PostgreSQL特定细节,请在此处查看。


我所需要的就是information_schemas。在pgadmin 3中,需要一个类似于MS SQL Server中sys的等效物。谢谢。 - Praveen

2
要获取描述查询返回的完整视图,请右键单击感兴趣的关系/表,选择“属性”...然后在提供的窗口中使用“列”选项卡。
唯一的区别是该窗口不提供有关外键关系的信息。

2

psql的\d命令向数据库发送一组查询以查询模式,然后打印结果。

如果您想通过SQL直接提取类似的信息,则可以使用'-E' psql选项来显示这些查询。

话虽如此,psql使用内部的Postgresql目录表,而不是标准化的“information_schema”架构(请参见garethflowers的答案)。因此,如果您关心可移植性,甚至保证它将在下一个版本中继续工作,那么您可能应该使用information_schema。


2

同时也可以直接在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'"

1
请参阅下面 Gareth Flowers 的回答:
SELECT *
FROM information_schema.columns
WHERE table_name = '<YourTableName>';

并且还要确保使用小写字母命名您的表...

-3
你可以使用以下命令: \d 表名

1
尝试在你的回答中添加一些解释,这将使其更清晰易懂。请阅读 stackoverflow.com/help/how-to-answer。 - 32cupo
我认为需要一个更好的解释,因为在许多版本中,这个命令都不起作用。 - IFTEKHAR I ASIF

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接