繁体   English   中英

如何仅获取PostgreSQL中数据库的表名

[英]How to get only the table names of a database in PostgreSQL

我有几个bash脚本,用于查询mysql数据库并获取表名,我使用以下命令:

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

在最坏的情况下,我需要解析它以仅获取表的名称,但是如果有人知道实现我想要的方法,我会很高兴。

此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; --成为";DELETE FROM users; --"

请注意,您只会获得当前用户有权访问的表名。 关于信息模式和系统目录:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM