如何在 PostgreSQL 中仅获取数据库的表名
Posted
技术标签:
【中文标题】如何在 PostgreSQL 中仅获取数据库的表名【英文标题】:How to get only the table names of a database in PostgreSQL 【发布时间】:2015-04-22 21:46:29 【问题描述】:我有几个查询 mysql 数据库并获取表名的 bash 脚本,我使用以下命令:
mysql -NBA --user=$DB_user --password=$DB_pass --database=$DB_name -e 'show tables'
使用 -NBA 参数过滤结果并得到如下结果:
categories
colections
colors
files
在带有 psql 的 postgreSQL 中,我试图实现相同的格式,我正在阅读文档并使用以下参数:
psql --username=$DB_user -W --host=$HOST --dbname=$DB_name -Atc '\dt'
这是我能得到的最好的了
public|categories|table|user
public|colections|table|dbuser
public|colors|table|dbuser
public|files|table|dbuser
在最坏的情况下,我需要解析它以仅获取表的名称,但如果有人知道实现我想要的方法,我会很高兴。
【问题讨论】:
postgresql.org/docs/9.1/static/infoschema-tables.html 您可以使用 awk 来获取 bash 脚本中的表名... 【参考方案1】:此 SQL 查询获取所需信息(或其任何变体):
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'public' -- mysql does not have schemas
ORDER BY 1;
所以从外壳:
psql --username=$DB_user -W --host=$HOST --dbname=$DB_name -Atc 'SELECT table_name FROM information_schema.tables WHERE table_schema = \'public\' ORDER BY 1'
您可能想使用quote_ident(table_name)
来获得转义的表名:
;DELETE FROM users; --
变为 ";DELETE FROM users; --"
请注意,您只能获取当前用户有权访问的表名。关于信息架构和系统目录:
How to check if a table exists in a given schema【讨论】:
以上是关于如何在 PostgreSQL 中仅获取数据库的表名的主要内容,如果未能解决你的问题,请参考以下文章
PostgreSQL 如何检索数据库中所有表里,包含FileName字段的表名