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

Ale*_*vsk 2 mysql postgresql bash psql

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

mysql -NBA --user=$DB_user --password=$DB_pass --database=$DB_name -e 'show tables'
Run Code Online (Sandbox Code Playgroud)

使用 -NBA 参数,我过滤结果并得到如下结果:

    categories
    colections
    colors
    files
Run Code Online (Sandbox Code Playgroud)

在 postgreSQL 和 psql 中,我试图实现相同的格式,我正在阅读文档并使用以下参数:

psql --username=$DB_user -W --host=$HOST --dbname=$DB_name -Atc '\dt'
Run Code Online (Sandbox Code Playgroud)

这是我能得到的最好的

    public|categories|table|user
    public|colections|table|dbuser
    public|colors|table|dbuser
    public|files|table|dbuser
Run Code Online (Sandbox Code Playgroud)

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

Erw*_*ter 5

此 SQL 查询获取所需的信息(或其任何变体):

SELECT table_name
FROM   information_schema.tables
WHERE  table_schema = 'public' -- mysql does not have schemas
ORDER  BY 1;
Run Code Online (Sandbox Code Playgroud)

所以从外壳来看:

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'
Run Code Online (Sandbox Code Playgroud)

您可能想使用quote_ident(table_name)转义表名称:

;DELETE FROM users; --变成";DELETE FROM users; --"

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