Answers:
在psql
命令行界面中,
首先,选择您的数据库
\c database_name
然后,这将显示当前模式中的所有表:
\dt
以编程方式(psql
当然也可以通过界面):
SELECT * FROM pg_catalog.pg_tables;
系统表位于pg_catalog
数据库中。
\l
等效show databases
。 dt
≃ show tables
和 l
≃show databases
\dt
非常有用 该表pg_catalog.pg_tables
要少得多,因为它似乎将内部表与用户创建的表一起聚集到碰巧要连接到的任何数据库。
psql my_db_name
应该运行才能\dt
正常工作。当我在psql
没有数据库名称的情况下运行时,收到“未找到任何关系”消息
SELECT * FROM pg_catalog.pg_tables WHERE schemaname != 'pg_catalog' AND schemaname != 'information_schema'
\c <DATABASE_NAME>
选择数据库。
以超级用户身份登录:
sudo -u postgres psql
您可以按\l
命令列出所有数据库和用户(按列出其他命令\?
)。
现在,如果您想查看其他数据库,则可以通过\c
命令更改用户/数据库\c template1
,\c postgres postgres
并使用\d
,\dt
或\dS
查看表/视图/等。
(为了完整性)
您还可以查询(SQL标准)信息模式:
SELECT
table_schema || '.' || table_name
FROM
information_schema.tables
WHERE
table_type = 'BASE TABLE'
AND
table_schema NOT IN ('pg_catalog', 'information_schema');
您可以使用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中,您可以运行以下命令:
\?
列出所有命令\l
列出数据库\conninfo
显示有关当前连接的信息\c [DBNAME]
连接到新数据库,例如 \c template1
\dt
公用模式的列表表\dt <schema-name>.*
列出某些架构的表,例如 \dt public.*
\dt *.*
列出所有模式的表SELECT * FROM my_table;
(注意:一条语句必须以分号终止;
)\q
退出psql使用-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;
**************************
以超级用户身份登录,以便您可以检查所有数据库及其模式:
sudo su - postgres
然后我们可以使用以下命令进入postgresql shell:
psql
现在,您可以使用以下命令检查所有数据库列表:
\l
如果您还想检查数据库的大小,请使用:-
\l+
按q
返回。
找到数据库后,您可以使用以下命令连接到该数据库:
\c database_name
连接后,您可以通过以下方式检查数据库表或架构:
\d
现在返回到外壳使用:
q
现在进一步查看特定表使用的详细信息:
\d table_name
要返回postgresql_shell,请按\q
。
然后返回终端exit
。
使用只看一张桌子
=> \dt
如果要查看架构表
=>\dt+
如果您想查看特定的架构表
=>\dt schema_name.*
+
使用S
。后者(字母)显示架构表。在+
简单地显示额外的信息。
请注意,\dt
仅此一项将列出您正在使用的数据库的公共模式中的表。我喜欢将表保留在单独的模式中,因此,可接受的答案对我不起作用。
要列出特定模式中的所有表,我需要:
1)连接到所需的数据库:
psql mydb
2)在\dt
命令后指定要查看其表的架构名称,如下所示:
\dt myschema.*
这显示了我感兴趣的结果:
List of relations
Schema | Name | Type | Owner
----------+-----------------+-------+----------
myschema | users | table | postgres
myschema | activity | table | postgres
myschema | roles | table | postgres
select
*
from
pg_catalog.pg_tables
where
schemaname != 'information_schema'
and schemaname != 'pg_catalog';
首先,您必须像这样连接数据库
我的数据库是ubuntu
使用此命令进行连接
\c ubuntu
此消息将显示
“您现在以用户“ postgres”连接到数据库“ ubuntu”。”
现在
运行此命令以显示其中的所有表
\d+
就我而言,在命令行中列出所有表的最直接方法是:
psql -a -U <user> -p <port> -h <server> -c "\dt"
对于给定的数据库,只需添加数据库名称:
psql -a -U <user> -p <port> -h <server> -c "\dt" <database_name>
它在Linux和Windows上均可使用。
作为一个快速的班轮
# just list all the postgres tables sorted in the terminal
db='my_db_name'
clear;psql -d $db -t -c '\dt'|cut -c 11-|perl -ne 's/^([a-z_0-9]*)( )(.*)/$1/; print'
或者,如果您希望使用更清晰的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