题 在PostgreSQL中显示表格


什么相当于 show tables (来自MySQL)在PostgreSQL中?


1193
2018-04-20 19:07


起源


看到 dba.stackexchange.com/a/1288/90651 - Peter Krauss


答案:


来自 psql 命令行界面,显示当前架构中的所有表:

\dt

以编程方式(或来自 psql 界面,当然):

SELECT * FROM pg_catalog.pg_tables;

系统表位于pg_catalog数据库中。


1744
2018-04-20 19:12



@StephenCorwin不, \l 相当于 show databases 在MySQL中。 dt ≃ show tables 和 l ≃ show databases - user454322
\dt 非常有用。那 pg_catalog.pg_tables 因为它似乎将内部表与用户创建的表一起保存在您碰巧连接的任何数据库中。 - aroth
psql my_db_name 应该按顺序运行 \dt 上班。当我跑 psql 没有数据库名称,我收到了“找不到关系”的消息 - Maksim Dmitriev
没有系统表: SELECT * FROM pg_catalog.pg_tables WHERE schemaname != 'pg_catalog' AND schemaname != 'information_schema' - Matt White
你首先需要 \c <DATABASE_NAME> 选择你的数据库。 - danio


以超级用户身份登录:

sudo -u postgres psql

您可以按列表列出所有数据库和用户 \l 命令,(列出其他命令 \?)。

现在,如果您想查看其他数据库,可以更改用户/数据库 \c 命令就好 \c template1\c postgres postgres 并使用 \d\dt 要么 \dS 看表/视图/等。


131
2018-02-16 10:13



这是一个更好的答案,因为通常可以安装多个数据库。 - Jerome


(完整性)

你也可以查询(SQL标准) 信息架构

SELECT
    table_schema || '.' || table_name
FROM
    information_schema.tables
WHERE
    table_type = 'BASE TABLE'
AND
    table_schema NOT IN ('pg_catalog', 'information_schema');

93
2018-04-21 09:55



+1尽管为了完整性,mysql show tables只显示当前架构,以这种方式考虑它很好,mysql只有一个数据库但有多个架构,其中postgresql可以有多个数据库(目录)和模式。所以equiv应该是table_schema ='DB_NAME'; - Rahly


  1. 首次以postgres用户身份登录:

    sudo su - postgres

  2. 连接到所需的db: psql -d databaseName

  3. \dt 将返回您连接到的数据库中的所有表的列表。


38
2017-11-22 13:33





使用-E标志运行psql将回显内部使用的查询以实现 \ dt和类似:

sudo -u postgres psql -E

postgres=# \dt       
********* QUERY **********
SELECT n.nspname as "Schema",
c.relname as "Name", 
CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' END as "Type",
pg_catalog.pg_get_userbyid(c.relowner) as "Owner"
FROM pg_catalog.pg_class c
    LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ('r','')
    AND n.nspname <> 'pg_catalog'
    AND n.nspname <> 'information_schema'
    AND n.nspname !~ '^pg_toast'
AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 1,2;        
**************************

30
2017-07-02 00:48



BTW,TOAST用于存储大值: postgresql.org/docs/8.3/static/storage-toast.html - Dorian


如果您只想查看您创建的表列表,您可能只会说:

\dt

但我们也有 PATTERN 这将帮助您自定义要显示的表。显示所有包括 pg_catalog 架构,你可以添加 *

\dt *

如果你这样做: \?

\ dt [S +] [PATTERN]列表


22
2017-11-02 06:45





首先使用以下命令连接数据库

\c database_name

您将看到此消息您现在已连接到数据库database_name,并且它们运行以下命令

SELECT * FROM table_name;

在database_name和table_name中,只需使用您的数据库和表名进行更新


16
2018-06-27 15:45



我不确定这是在回答这个问题。我认为OP是(试图)知道他数据库中的所有表,而不是从他的数据库中的特定表中获取所有行...对吗? - snuggles


您可以使用PostgreSQL的交互式终端Psql来显示PostgreSQL中的表。

1.启动Psql

通常可以运行以下命令进入psql:

psql DBNAME USERNAME

例如, psql template1 postgres

您可能遇到的一种情况是:假设您以root身份登录,并且您不记得数据库名称。您可以通过运行首先输入Psql:

sudo -u postgres psql

在某些系统中,sudo命令不可用,您可以改为运行以下命令:

psql -U postgres
psql --username=postgres

2.显示表格

现在在Psql中你可以运行如下命令:

  1. \? 列出所有命令
  2. \l 列表数据库
  3. \conninfo 显示有关当前连接的信息
  4. \c [DBNAME] 连接到新数据库,例如, \c template1
  5. \dt 列表
  6. \q 退出psql

15
2017-11-08 17:07





如果您在PostgreSQL中使用pgAdmin4,则可以使用它来显示数据库中的表:

select * from information_schema.tables where table_schema='public';

11
2018-06-05 02:18





使用只看表

=> \dt

如果想看模式表

=>\dt+

如果要查看特定的架构表

=>\dt schema_name.* 

11
2018-06-09 06:15



我很确定你很困惑 + 同 S。后者(字母)显示了模式表。该 + 只是显示额外的信息。 - Garret Wilson