在PostgreSQL中显示表格

fly*_*ire 1703 postgresql

什么是相当于show tablesPostgreSQL中(从MySQL)?

Mih*_*șan 2477

psql命令行界面,这表明在当前模式中的所有表:

\c database_name
Run Code Online (Sandbox Code Playgroud)

以编程方式(psql当然也可以从界面):

\dt
Run Code Online (Sandbox Code Playgroud)

系统表位于pg_catalog数据库中.

  • @StephenCorwin不,`\ l`相当于MySQL中的`show databases`.`dt`≃`show tables`和`l`≃`show databases` (97认同)
  • 首先需要`\ c <DATABASE_NAME>`来选择你的数据库. (39认同)
  • `psql my_db_name`应按`\ dt`顺序运行.当我运行没有数据库名称的`psql`时,我收到了"找不到关系"消息 (32认同)
  • 没有系统表:`SELECT*FROM pg_catalog.pg_tables WHERE schemaname!='pg_catalog'AND schemaname!='information_schema'` (31认同)
  • `\ dt`非常有用.那个`pg_catalog.pg_tables`就不那么了,因为它似乎将内部表与用户创建的表一起整合到你碰巧连接的数据库中. (11认同)
  • 要记住这一点,请想一想`\ dt` ==显示表格. (6认同)
  • wtf postgres?为什么?? (4认同)
  • 您还需要指定要使用的模式,例如:\ dt my_schema.* (2认同)

JLa*_*rky 189

以超级用户身份登录:

sudo -u postgres psql
Run Code Online (Sandbox Code Playgroud)

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

现在,如果你想看到其他数据库则可以通过更改用户/数据库\c命令状\c template1,\c postgres postgres并使用\d,\dt\dS看表/视图/等.


Mil*_*dev 119

(完整性)

您还可以查询(SQL标准)信息架构:

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

  • +1但是为了完整性,mysql show tables只显示当前架构,以这种方式考虑它很好,mysql只有一个数据库但有多个架构,其中postgresql可以有多个数据库(目录)和模式.所以,equiv应该是table_schema ='DB_NAME'; (3认同)
  • @ChRoNoN:那是**标准 SQL 。自 1983 年以来,`||` 一直是 SQL 标准中的字符串连接运算符 - MS SQL 使用非标准字符串连接运算符。 (2认同)

Yuc*_*uci 100

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

1.启动Psql

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

psql DBNAME USERNAME
Run Code Online (Sandbox Code Playgroud)

例如, psql template1 postgres

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

sudo -u postgres psql
Run Code Online (Sandbox Code Playgroud)

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

psql -U postgres
psql --username=postgres
Run Code Online (Sandbox Code Playgroud)

2.显示表格

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

  1. \? 列出所有命令
  2. \l 列表数据库
  3. \conninfo 显示有关当前连接的信息
  4. \c [DBNAME] 连接到新数据库,例如, \c template1
  5. \dt 列表
  6. 然后你可以运行SQL语句,例如,\dt <schema-name>.*(注意:语句必须以分号结束\dt public.*)
  7. \dt *.* 退出psql


nis*_*ish 50

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

    sudo su - postgres

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

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


bsb*_*bsb 40

使用-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;        
**************************
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一句,TOAST 用于存储大值:http://www.postgresql.org/docs/8.3/static/storage-toast.html (2认同)

Sha*_*nis 37

以超级用户身份登录,以便您可以检查所有数据库及其模式: -

sudo su - postgres
Run Code Online (Sandbox Code Playgroud)

然后我们可以使用以下命令到达postgresql shell: -

psql
Run Code Online (Sandbox Code Playgroud)

您现在可以使用以下命令检查所有数据库列表: -

\l
Run Code Online (Sandbox Code Playgroud)

如果您想检查数据库的大小,还可以使用: -

\l+
Run Code Online (Sandbox Code Playgroud)

q回去.

现在找到数据库后,可以使用以下命令连接到该数据库: -

\c database_name
Run Code Online (Sandbox Code Playgroud)

连接后,您可以通过以下方式检查数据库表或模式: -

\d
Run Code Online (Sandbox Code Playgroud)

现在返回shell使用: -

q
Run Code Online (Sandbox Code Playgroud)

现在进一步查看某个表的使用细节: -

\d table_name
Run Code Online (Sandbox Code Playgroud)

要回到postgresql_shell,请按\q.

并返回终端机exit.

  • 对于不熟悉 pgsql 的人来说,这是一个很好的快速入门指南 (4认同)

Ban*_*ser 24

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

\dt

但我们也有PATTERN帮助您自定义要显示的表格.要显示包括pg_catalogSchema 在内的所有内容,您可以添加*.

\dt *

如果你这样做: \?

\ dt [S +] [PATTERN]列表


小智 24

(MySQL) 显示当前数据库的表列表

show tables;
Run Code Online (Sandbox Code Playgroud)

(PostgreSQL) 显示当前数据库的表列表

select * from pg_catalog.pg_tables where schemaname='public';
Run Code Online (Sandbox Code Playgroud)


Ary*_*yan 22

使用只看表

=> \dt
Run Code Online (Sandbox Code Playgroud)

如果想看模式表

=>\dt+
Run Code Online (Sandbox Code Playgroud)

如果要查看特定的架构表

=>\dt schema_name.* 
Run Code Online (Sandbox Code Playgroud)


J4c*_*4cK 19

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

\c database_name
Run Code Online (Sandbox Code Playgroud)

你会看到这个消息 - You are now connected to database database_name.然后他们运行以下命令

SELECT * FROM table_name;
Run Code Online (Sandbox Code Playgroud)

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

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

Rey*_*tol 16

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

select * from information_schema.tables where table_schema='public';
Run Code Online (Sandbox Code Playgroud)


rot*_*ial 14

请注意,\dt单独将列出您正在使用的数据库的公共模式中的表.我喜欢将表格保存在单独的模式中,因此接受的答案对我不起作用.

要列出特定架构中的所有表,我需要:

1)连接到所需的数据库:

psql mydb
Run Code Online (Sandbox Code Playgroud)

2)在\dt命令之后指定我想要查看表的模式名称,如下所示:

\dt myschema.*
Run Code Online (Sandbox Code Playgroud)

这向我展示了我感兴趣的结果:

               List of relations
 Schema   |       Name      | Type  |  Owner   
----------+-----------------+-------+----------
 myschema | users           | table | postgres
 myschema | activity        | table | postgres
 myschema | roles           | table | postgres
Run Code Online (Sandbox Code Playgroud)


Ani*_*AOU 13

这些步骤对我有用PostgreSQL 13.3并且Windows 10

  1. 打开cmd并输入psql -a -U [username] -p [port] -h [server]
  2. 输入\c [database]连接数据库
  3. 输入\dt\d显示所有表格


lau*_*108 12

\dt将列出表格,并\pset pager off在同一窗口中显示它们,而无需切换到单独的窗口。非常喜欢 dbshel​​l 中的这个功能。


小智 12

select 
  * 
from 
  pg_catalog.pg_tables 
where 
  schemaname != 'information_schema' 
  and schemaname != 'pg_catalog';
Run Code Online (Sandbox Code Playgroud)


小智 8

\ dt(no*required) - 将列出已连接到的现有数据库的所有表.还有用的注意事项:

\ d [table_name] - 将显示给定表的所有列,包括类型信息,引用和键约束.


Vin*_*pta 8

此 SQL 查询适用于大多数版本的 PostgreSQL,并且相当简单。

select table_name from information_schema.tables where table_schema='public' ;
Run Code Online (Sandbox Code Playgroud)

  • Milen A. Radev 的答案提供了 table_name。Reynante Daitol 的答案包含此代码的其余部分。如果您认为此代码提供了一些新的和独特的东西,那么就有理由包含指出这一点的解释。如果没有解释,人们只能猜测为什么它不同或可能更好。 (5认同)

Joh*_*hnK 6

您可以使用列出当前数据库中的表\dt.

Fwiw \d tablename将显示有关给定表的详细信息,例如show columns from tablenameMySQL,但有更多信息.


Yor*_*iev 6

作为“快速单线”

# how-to list all the tables 
export PGUSER='postgres'
export PGHOST='postgres-host-end-point'
export PGPORT=5432
export PGDATABASE=foobar

PGPASSWORD='uber-secret' psql -d $PGDATABASE -t -q -c \
 "SELECT table_catalog,table_schema,table_name 
   FROM information_schema.tables where table_schema='public';
Run Code Online (Sandbox Code Playgroud)

或者如果您更喜欢更清晰的 json 输出多线:

IFS='' read -r -d '' sql_code <<"EOF_CODE"
    select array_to_json(array_agg(row_to_json(t))) from (
        SELECT table_catalog,table_schema,table_name 
        FROM information_schema.tables
        ORDER BY table_schema,table_name ) t
EOF_CODE
psql -d postgres -t -q -c "$sql_code"|jq
Run Code Online (Sandbox Code Playgroud)


Ala*_*pin 6

根据我的口味,在命令行列出所有表的最直接方法是:

psql -a -U <user> -p <port> -h <server> -c "\dt"
Run Code Online (Sandbox Code Playgroud)

对于给定的数据库,只需添加数据库名称:

psql -a -U <user> -p <port> -h <server> -c "\dt" <database_name>
Run Code Online (Sandbox Code Playgroud)

它适用于 Linux 和 Windows。


Ame*_*Ali 6

  1. 登录后在 PostgreSQL 命令行界面中,键入以下命令连接所需的数据库。

        \c [database_name]
    
    Run Code Online (Sandbox Code Playgroud)

然后你会看到这条消息You are now connected to database "[database_name]"

  1. 键入以下命令列出所有表。

        \dt
    
    Run Code Online (Sandbox Code Playgroud)


小智 5


使用psql:\ dt

要么:

SELECT c.relname AS Tables_in FROM pg_catalog.pg_class c
        LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE pg_catalog.pg_table_is_visible(c.oid)
        AND c.relkind = 'r'
        AND relname NOT LIKE 'pg_%'
ORDER BY 1
Run Code Online (Sandbox Code Playgroud)


小智 5

这些列出了当前数据库的所有模式的所有表:

\dt *.*
Run Code Online (Sandbox Code Playgroud)
\dtS *.*
Run Code Online (Sandbox Code Playgroud)

这些详细列出了当前数据库的所有模式的所有表:

\dt+ *.*
Run Code Online (Sandbox Code Playgroud)
\dtS+ *.*
Run Code Online (Sandbox Code Playgroud)

这些列出了当前数据库的所有表pg_catalog公共模式:

\dtS
Run Code Online (Sandbox Code Playgroud)
\dtS *
Run Code Online (Sandbox Code Playgroud)
\dt *
Run Code Online (Sandbox Code Playgroud)

这些详细列出了当前数据库的所有表pg_catalog和模式:public

\dtS+
Run Code Online (Sandbox Code Playgroud)
\dtS+ *
Run Code Online (Sandbox Code Playgroud)
\dt+ *
Run Code Online (Sandbox Code Playgroud)

这列出了public当前数据库模式的所有表:

\dt
Run Code Online (Sandbox Code Playgroud)

public详细列出了当前数据库的所有模式表:

\dt+
Run Code Online (Sandbox Code Playgroud)

这些列出了my_schema当前数据库模式的所有表:

\dtS my_schema.*
Run Code Online (Sandbox Code Playgroud)
\dt my_schema.*
Run Code Online (Sandbox Code Playgroud)

这些my_schema详细列出了当前数据库模式的所有表:

\dtS+ my_schema.*
Run Code Online (Sandbox Code Playgroud)
\dt+ my_schema.*
Run Code Online (Sandbox Code Playgroud)