如何在 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; --"

Function to loop through and select data from multiple tables Table name as a PostgreSQL function parameter

请注意,您只能获取当前用户有权访问的表名。关于信息架构和系统目录:

How to check if a table exists in a given schema

【讨论】:

以上是关于如何在 PostgreSQL 中仅获取数据库的表名的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL 如何检索数据库中所有表里,包含FileName字段的表名

请教如何修改postgresql数据库中已有数据的表的字段长度

为啥 PostgreSQL 不喜欢大写的表名?

如何从多次包含此值的表中仅获取 1 个结果?

如何从 EF 中的表中仅选择某些字段

如何使用 PostgreSQL 从表名中获取列属性查询?