考虑一下我的所有模式名称都在一个表中,而我的所有表名都在另一个表中的情况。
是否可以执行以下操作(伪代码)?
SELECT value FROM (SELECT schema_name FROM schemas).(SELECT table_name FROM tables)
还是我必须将查询分解为三个 SELECT?
考虑一下我的所有模式名称都在一个表中,而我的所有表名都在另一个表中的情况。
是否可以执行以下操作(伪代码)?
SELECT value FROM (SELECT schema_name FROM schemas).(SELECT table_name FROM tables)
还是我必须将查询分解为三个 SELECT?
杰克已经展示了要走的路。不过,我觉得还有改进的余地。
测试设置:
2017年更新功能
format()
;2021年格式化:db<>在这里摆弄
称呼:
该函数可以返回任何类型的任何列。
阅读有关多态类型和声明函数参数的手册。
用于
format()
防御 SQL 注入。看:根据请求通过查询检索表名。
为返回的列命名,以便于引用。
原答案:
quote_ident()
通过使用和强制转换来regclass
防御 SQL 注入。您需要动态 SQL - 可能是这样的:
我假设每个表都存在于每个模式中,正如问题所暗示的那样