我有几个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
在最坏的情况下,我需要解析这个只获得表的名称,但如果有人知道实现我想要的方式,我会很高兴。
答案 0 :(得分:1)
此SQL查询获取所需信息(或其任何变体):
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'public' -- mysql does not have schemas
ORDER BY 1;
所以来自shell:
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; --"
请注意,您只能获取当前用户有权访问的表名。关于信息架构和系统目录: