【发布时间】:2010-10-20 15:49:51
【问题描述】:
PostgreSQL 中的show tables(来自 MySQL)是什么?
【问题讨论】:
标签: postgresql
PostgreSQL 中的show tables(来自 MySQL)是什么?
【问题讨论】:
标签: postgresql
从psql 命令行界面,
首先,选择你的数据库
\c database_name
然后,这将显示当前架构中的所有表:
\dt
以编程方式(当然也可以通过psql 接口):
SELECT * FROM pg_catalog.pg_tables;
系统表位于pg_catalog 数据库中。
【讨论】:
\l 相当于 MySQL 中的 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 来查看表/视图/等.
【讨论】:
您可以使用 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【讨论】:
(为了完整性)
您还可以查询(SQL 标准)information schema:
SELECT
table_schema || '.' || table_name
FROM
information_schema.tables
WHERE
table_type = 'BASE TABLE'
AND
table_schema NOT IN ('pg_catalog', 'information_schema');
【讨论】:
|| 自 1983 年以来一直是 SQL 标准中的字符串连接运算符 - 它是使用非标准字符串连接运算符的 MS SQL。
以 postgres 用户身份首次登录:
sudo su - postgres
连接到所需的数据库:psql -d databaseName
\dt 将返回您连接到的数据库中所有表的列表。
【讨论】:
以超级用户身份登录,以便检查所有数据库及其架构:-
sudo su - postgres
然后我们可以使用以下命令进入 postgresql shell:-
psql
您现在可以使用以下命令检查所有数据库列表:-
\l
如果您还想检查数据库的大小,请使用:-
\l+
按q返回。
一旦你找到了你的数据库,你就可以使用以下命令连接到该数据库:-
\c database_name
连接后,您可以通过以下方式检查数据库表或架构:-
\d
现在回到shell使用:-
q
现在来进一步看看某表的使用细节:-
\d table_name
要返回 postgresql_shell,请按\q。
返回终端按exit。
【讨论】:
使用 -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;
**************************
【讨论】:
仅使用查看表格
=> \dt
如果想查看架构表
=>\dt+
如果您想查看特定的架构表
=>\dt schema_name.*
【讨论】:
+ 与 S 混淆了。后者(字母)显示模式表。 + 只是显示额外的信息。
如果您只想查看已创建的表列表,您可能只会说:
\dt
但我们也有PATTERN,它可以帮助您自定义要显示的表格。要显示包括pg_catalog 在内的所有Schema,可以添加*。
\dt *
如果你这样做:\?
\dt[S+] [PATTERN] 列出表格
【讨论】:
首先使用以下命令连接数据库
\c database_name
您会看到这条消息 - You are now connected to database database_name。他们运行以下命令
SELECT * FROM table_name;
在 database_name 和 table_name 中只更新你的数据库和表名
【讨论】:
如果您在 PostgreSQL 中使用 pgAdmin4,您可以使用它来显示数据库中的表:
select * from information_schema.tables where table_schema='public';
【讨论】:
请注意,仅\dt 将列出您正在使用的数据库的 public 架构中的表。我喜欢将我的表保存在不同的模式中,所以接受的答案对我不起作用。
要列出特定架构中的所有表,我需要:
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';
【讨论】:
\dt (no * required) -- 将列出您已经连接到的现有数据库的所有表。还需要注意:
\d [table_name] -- 将显示给定表的所有列,包括类型信息、引用和键约束。
【讨论】:
您可以使用\dt列出当前数据库中的表。
Fwiw,\d tablename 将显示有关给定表的详细信息,类似于 MySQL 中的 show columns from tablename,但包含更多信息。
【讨论】:
根据我的口味,在命令行列出所有表的最直接方法是:
psql -a -U <user> -p <port> -h <server> -c "\dt"
对于给定的数据库,只需添加数据库名称:
psql -a -U <user> -p <port> -h <server> -c "\dt" <database_name>
它适用于 Linux 和 Windows。
【讨论】:
使用 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
【讨论】:
这些步骤对我有用 PostgreSQL 13.3 和 Windows 10
psql -a -U [username] -p [port] -h [server]
\c [database] 以连接到数据库\dt 或 \d 以显示所有表格【讨论】:
\dt 将列出表格,\pset pager off 在同一窗口中显示它们,而不会切换到单独的窗口。非常喜欢 dbshell 中的这个功能。
【讨论】:
首先你必须像这样连接你的数据库
我的数据库是 ubuntu
使用此命令连接
\c ubuntu
此消息将显示
“您现在以用户“postgres”的身份连接到数据库“ubuntu”。”
现在
运行此命令以显示其中的所有表
\d+
【讨论】:
作为一个快速的oneliner
# 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
【讨论】:
此 SQL 查询适用于大多数 PostgreSQL 版本并且相当简单。
select table_name from information_schema.tables where table_schema='public' ;
【讨论】:
登录后在 PostgreSQL 命令行界面中,键入以下命令以连接所需的数据库。
\c [database_name]
然后你会看到这条消息You are now connected to database "[database_name]"
键入以下命令以列出所有表。
\dt
【讨论】:
要查看 psql 中的外部表,请运行 \dE
【讨论】:
首先,您可以使用 mac 上的 postgre.app 或 postico 连接您的 postgres 数据库。 运行以下命令:
psql -h localhost -p port_number -d database_name -U user_name -W
然后你输入你的密码,这应该可以访问你的数据库
【讨论】:
(MySQL) 显示当前数据库的表列表
show tables;
(PostGreSQL) 显示当前数据库的表列表
select * from pg_catalog.pgtables where schemaname='public';
【讨论】: