是否可以从架构内的所有表中进行选择?我得到了所有的表名
select table_name from information_schema.tables
但我无法使用它来进行查询。
您不能直接执行此操作,因为如果表名未知(即来自某个变量或子查询),则无法编写“正常”查询。但是您可以为此构建和执行动态 SQL 语句。例如,如果您需要每个表中的列 'name',您可以执行以下操作(在PL/pgSQL 函数中):
FOR i IN SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'your_desired_schema'
LOOP
sql_string := sql_string || format($$
-- some whitespace is mandatory here
UNION
SELECT name FROM %I
$$,
i.table_name);
END LOOP;
EXECUTE sql_string;
Run Code Online (Sandbox Code Playgroud)
但是,在这种形式中它不起作用,因为除非您将其放入变量中SELECT
,plpqsql
否则您无法进入。您可以为此创建一个临时表,循环结果(在另一个FOR
循环中),或者 - 不使用UNION
- 仅在每次迭代中返回,具体取决于您的需要。
而且,当然,这假定您要从所有表中选择一列(或多于一列,但始终具有相同的名称和类型)。如果您只需要每个表中的所有数据,那么这些表必须具有相同的结构(相同的列类型,顺序相同,名称相同)。
笔记:
format()
功能是在 9.1 版本中引入的DO
块提到的早期版本。它的问题在于您不能简单地使用SELECT
那里来返回行,正如在另一个答案中指出的那样。 归档时间: |
|
查看次数: |
32073 次 |
最近记录: |