PostgreSQL中的公用表表达式

时间:2013-04-05 12:24:29

标签: postgresql common-table-expression

我只是在学习CTE,我想在WITH子句中创建动态查询。

以下是我编写的代码。

WITH name1 AS (
    SELECT schema_name as my_schema
    FROM public.schema_table
), name2 AS (
    SELECT num_rows as my_row
    FROM my_schema.row_table
)
SELECT my_row
from name2;

从WITH内部的第一个查询中,一个数据库中存在一个模式,而该模式名称由

返回
SELECT schema_name as my_schema 
FROM public.schema_table

我想在第二个查询中使用,因为我将其保存到my_schema。

但是当我运行此查询时,它会给我一些错误,例如my_schema不存在,因为我想使用my_schema包含的值。

你怎么能这样做?

1 个答案:

答案 0 :(得分:3)

首先,您似乎没有在查询中的任何位置使用name1,因此我怀疑您可能没有完全理解WITH

然而,看起来您可能有多个名为row_table的表,每个表都存在于自己的架构中,并希望创建一个查询,让您选择要从哪个架构中获取。

FROM my_schema.row_table
     ^^^^^^^^^

my_schema不是变量,它是架构的名称。要执行您想要的操作,您将不得不使用pg_catalog表来查找所需模式中关系的oid,并以这种方式查找信息。

另一种解决方案可能是操纵搜索路径进行出价:

BEGIN;
    SET LOCAL SCHEMA 'my_schema';
    SELECT num_rows FROM row_table;   -- will use my_schema.
COMMIT;