如何列出psql中的所有表?

问题描述 投票:0回答:7

我想列出 PostgreSQL 安装中的

liferay
数据库中的所有表。我该怎么做?

我想在

SELECT * FROM applications;
数据库中执行
liferay
applications
是我的liferay数据库中的一个表。这是怎么做到的?

这是我所有数据库的列表:

postgres=# \list
                              List of databases
Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
 -----------+----------+----------+-------------+-------------+-----------------------
 liferay   | postgres | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | =Tc/postgres         +
           |          |          |             |             | postgres=CTc/postgres+
           |          |          |             |             | liferay=CTc/postgres
 lportal   | postgres | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | 
 postgres  | postgres | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | 
 template0 | postgres | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(5 rows)

postgres=# 
database postgresql command psql dbtable
7个回答
244
投票

如果您想列出所有表,您必须使用:

\dt *.*

表示您想要所有模式中的所有表。这将包括

pg_catalog
中的表、系统表以及
information_schema
中的表。没有内置的方式来表示“所有用户定义模式中的所有表”;但是,您可以在运行
search_path
之前将
\dt
设置为所有感兴趣模式的列表。

您可能希望以编程方式执行此操作,在这种情况下,

psql
反斜杠命令将无法完成这项工作。这就是 the
INFORMATION_SCHEMA
来救援的地方。列出表格:

SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';

顺便说一句,如果您想查看

psql
正在做什么以响应反斜杠命令,请使用
psql
标志运行
-E
。例如:

$ psql -E regress    
regress=# \list
********* QUERY **********
SELECT d.datname as "Name",
       pg_catalog.pg_get_userbyid(d.datdba) as "Owner",
       pg_catalog.pg_encoding_to_char(d.encoding) as "Encoding",
       d.datcollate as "Collate",
       d.datctype as "Ctype",
       pg_catalog.array_to_string(d.datacl, E'\n') AS "Access privileges"
FROM pg_catalog.pg_database d
ORDER BY 1;
**************************

因此您可以看到

psql
在获取数据库列表时正在搜索
pg_catalog.pg_database
。同样,对于给定数据库中的表:

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' WHEN 'f' THEN 'foreign table' 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;

最好尽可能使用 SQL 标准、可移植的

INFORMATION_SCHEMA
而不是 Pg 系统目录,但有时您需要特定于 Pg 的信息。在这些情况下,可以直接查询 系统目录,并且
psql -E
可以作为如何执行此操作的有用指南。


98
投票

连接到数据库,然后列出表:

\c liferay
\dt

反正我就是这么做的。

如果您愿意,您可以将这两个命令组合到一行中:

\c liferay \dt

15
投票

要查看您可以执行的公共表

列出表格

\dt

列出表、视图和访问权限

\dp or \z

或者只是表名

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

6
投票

在SQL查询中,你可以写这样的代码:

select table_name from information_schema.tables where table_schema='YOUR_TABLE_SCHEME';

将您的表方案替换为 YOUR_TABLE_SCHEME;

示例:

select table_name from information_schema.tables where table_schema='eLearningProject';

要查看所有方案和所有表,不需要where子句:

select table_name from information_schema.tables

2
投票

单行示例是:

\dt schemaname.* 

在您的场景中:

\dt public.*

并获取模式列表:

\dn

请注意,未指定时,

public
是默认架构。引用文档

在前面的部分中,我们创建了表,但没有指定任何 模式名称。默认情况下,此类表(和其他对象)是 自动放入名为“public”的模式中。每个新数据库 包含这样的模式。

使用

\dt *.*
将输出所有模式中所有表的长列表,包括内部表,例如
pg_catalog
。以上可以帮助过滤。


1
投票

如果您不需要所有模式中的所有表,这可以在自动化脚本中使用:

  for table in $(psql -qAntc '\dt' | cut -d\| -f2); do
      ...
  done

0
投票

首先,连接到

liferay
数据库:

\c liferay

现在,这些列出了

liferay
数据库的所有模式的所有表:

\dt *.*
\dtS *.*

并且,这些详细列出了

liferay
数据库的所有模式的所有表:

\dt+ *.*
\dtS *.*

并且,这些列出了

pg_catalog
数据库的 liferay
public
模式的所有表:

\dtS
\dtS *
\dt *

并且,这些详细列出了

pg_catalog
数据库的
public
liferay
模式的所有表:

\dtS+
\dtS+ *
\dt+ *

并且,这列出了

public
数据库的
liferay
模式的所有表:

\dt

并且,这详细列出了

public
数据库的
liferay
模式的所有表:

\dt+

并且,这些列出了

my_schema
数据库的
liferay
模式的所有表:

\dtS my_schema.*
\dt my_schema.*

最后,详细列出了

my_schema
数据库的
liferay
模式的所有表:

\dtS+ my_schema.*
\dt+ my_schema.*
© www.soinside.com 2019 - 2024. All rights reserved.