psql
命令行工具。当我使用
psql --username=postgres
登录时,如何列出所有数据库和表?我尝试过
\d
,d
和dS+
,但未列出任何内容。我已经使用pgAdmin III创建了两个数据库和一些表,所以我知道应该列出它们。#1 楼
请注意以下命令:\list
或\l
:列出所有数据库\dt
:使用search_path
列出当前数据库中的所有表\dt *.
:列出当前数据库中的所有表,而不管您的search_path
您将永远不会看到其他数据库中的表,这些表是不可见的。您必须连接到正确的数据库才能查看其表(和其他对象)。
要切换数据库,请执行以下操作:
有关psql的手册。
评论
您可以使用\ c db_name连接到某个数据库。
–eikes
13年2月17日在8:57
\ dt似乎没有列出当前数据库中的所有表(似乎排除了至少在9.2上在search_path中找不到的表)
–杰克·道格拉斯(Jack Douglas)
13年8月6日在19:42
\ dt *。将列出所有模式中的所有表,而无需修改搜索路径。
– danpelota
15年3月24日在16:10
\ l +是我的最爱-它也显示磁盘使用情况。
–张怡
2015年5月21日在5:57
在Windows上,我可以使用此命令psql -U username -l列出数据库,但不适用于斜杠版本。
– NoName提供
2015年10月6日15:37
#2 楼
列出数据库:SELECT datname FROM pg_database
WHERE datistemplate = false;
此列出当前数据库中的表
SELECT table_schema,table_name
FROM information_schema.tables
ORDER BY table_schema,table_name;
评论
您是对的,但问题是关于psql-tool的meta命令。 \ dt比键入任何查询要容易得多。
–弗兰克·海肯斯(Frank Heikens)
2011-2-18在7:50
我认为这是一个很好的答案,因为它可以从Linux命令行执行,而不必放在psql解释器中,有时使用ExtraPutty对我来说挂起它。
–爱与和平-Joe Codeswell
15年5月16日在17:51
也挽救了我的一天。对于我的特殊情况,我要添加WHERE table_schema ='public',因为我只想删除自定义表。
– Renra
2015年9月28日15:31
如果使用-E标志启动psql,则在使用meta命令时它将显示实际查询。
– Deebster
16年1月13日在9:03
是的,我认为这是一个很好的答案,因为它可以让您以更可控的方式加入和查询数据库,尤其是当您想从大型数据库列表中生成一些脚本时。谢谢。
– Saim
19年5月28日在20:51
#3 楼
在Postgresql中,这些终端命令列出了可用的数据库el@defiant$ /bin/psql -h localhost --username=pgadmin --list
或者更简单地说明了该命令:
psql -U pgadmin -l
这些命令在终端上打印:
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
kurz_prod | pgadmin | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
pgadmin | pgadmin | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(5 rows)
这些是可用的数据库。
在PSQL中,这些命令列出可用的表
必须先指定一个数据库,然后才能列出该数据库中的表。
el@defiant$ psql -U pgadmin -d kurz_prod
这将带您进入psql终端:
kurz_prod=#
使用命令
\d
表示所有表,视图和序列kurz_prod=# \d
此打印结果:
List of relations
Schema | Name | Type | Owner
--------+---------+----------+---------
public | mytable | table | pgadmin
public | testing | sequence | pgadmin
(2 rows)
然后,要退出psql终端,请键入
\q
并按Enter键。或Ctrl-D
做同样的事情。这些是该数据库中的表。评论
\ d不仅列出表:\ d [S +]列出表,视图和序列
–杰克·道格拉斯(Jack Douglas)
13年8月6日在19:43
对我来说,这是“正确”的答案,因为它不需要您已经连接到现有数据库。
– aardvarkk
17年3月14日在15:11
一种用于脚本(以root用户身份)的衬里:su--c'psql -U postgres postgres -P pager = off -P tuples_only = on -l'postgres |切-d'|' -f1 | tr -d'[:空白:]'| grep -vE'$ ^'
–user3132194
9月21日7:38
#4 楼
\l
也是\list
的简写。有很多斜杠命令,您可以使用\?
在psql中列出。#5 楼
要获取有关数据库和表列表的更多信息,可以执行以下操作:\l+
列出数据库 List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges | Size | Tablespace | Description
------------+----------+----------+-------------+-------------+-----------------------+---------+------------+--------------------------------------------
pgbench | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | 29 MB | pg_default |
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | 6073 kB | pg_default | default administrative connection database
slonmaster | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | 1401 MB | movespace |
slonslave | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | 32 MB | pg_default |
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +| 5785 kB | pg_default | unmodifiable empty database
| | | | | postgres=CTc/postgres | | |
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +| 5985 kB | pg_default | default template for new databases
| | | | | postgres=CTc/postgres | | |
test | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | 13 MB | pg_default |
(7 rows)
和
\d+
列出当前数据库中当前search_path架构中的所有表。test=# \dn+ --list schemas
List of schemas
Name | Owner | Access privileges | Description
--------+----------+----------------------+------------------------
public | postgres | postgres=UC/postgres+| standard public schema
| | =UC/postgres |
schema1 | postgres | postgres=UC/postgres+|
| | =UC/postgres |
(2 row)
test=# set search_path to schema1, public;
SET
test=# \d+
List of relations
Schema | Name | Type | Owner | Size | Description
---------+-----------------+-------+--------------+------------+-------------
public | all_units | table | postgres | 0 bytes |
public | asset | table | postgres | 16 kB |
public | asset_attribute | table | postgres | 8192 bytes |
public | food | table | postgres | 48 kB |
public | name_log | table | postgres | 8192 bytes |
public | outable | table | ordinaryuser | 0 bytes |
public | outable2 | table | ordinaryuser | 0 bytes |
public | test | table | postgres | 16 kB |
public | usr | table | postgres | 5008 kB |
schema1 | t1 | table | postgres | 0 bytes |
(10 rows)
#6 楼
在pg_Admin中,您可以简单地在当前数据库上运行以下命令,它将获取指定架构的所有表:永久表(通常是您要查找的表)。如果将
*
通配符更改为table_name
,则只能得到表名。除非您的管理员设置了新的架构,否则公共table_schema
是大多数数据库的默认架构。评论
尽管这是事实,但这是针对与OP询问不同的客户端。
– dezso
2012年11月29日17:56
这对我来说非常有用,尽管我的用例不是OP所要求的,但它通过包装器连接时帮助我获取了表列表(在Julialang LibPQ.jl中)
–瓦斯
19年8月10日在15:52
#7 楼
您可能已经将表插入了不在您的搜索路径或默认路径(即公共)中的架构中,因此使用\ dt不会显示这些表。如果使用称为数据的架构,则可以通过运行以下内容来解决此问题:alter database <databasename> set search_path=data, public;
退出并重新输入psql,现在\ dt将向您显示架构中的表数据。
评论
好吧,简单设置search_path = data,public;也会做到的:)
– dezso
2014年4月3日14:57
@dezso,这是否永久地或仅在该psql会话中进行更改?
–约翰·鲍威尔(John Powell)
2014年4月3日在17:40
嗯,我不是很清楚。它旨在代替注销-登录周期。
– dezso
2014年4月3日在18:12
评论
如果要通过命令行访问它,请运行psql -l <br />此评论绝对应该是最佳答案之一!如果需要身份验证,还可以使用psql --username = postgres -l。