为什么我的 insert/select 语句在单个数据库中出现交叉引用错误

Why am I getting a cross-reference error with my insert/select statement in single database

我有以下 INSERT 语句,它在没有 WHERE 子句的情况下工作正常,但不能使用它。我通过 dblink 连接连接到一个单独的数据库,并且我创建了几个视图,其中包含我正在使用的数据库所需的数据。

我有以下声明:

INSERT INTO my_schema.table2 (id, name, app, version, status)
SELECT view.my_view.id, view.my_view.name, view.my_view.app, view.my_view.version, view.my_view.status
FROM view.my_view
WHERE view.my_view.name NOT IN (SELECT my_schema.table2.name FROM my_schema.table2);

收到的错误是:

ERROR: cross-database references are not implemented: "my_schema.table2.name"

视图和my_schema 模式都在同一个数据库中。我认为 FDW 无法引用本地 table 可能是一件奇怪的事情,但即使我在 my_schema 中创建了一个 table 来临时存放数据,它也没有没用。

本质上,我希望通过多个视图从 FDW 中的多个 table 中提取数据,然后将该数据的子部分聚合到几个不同的 table 中。上面的 select 语句是我试图创建的函数的一部分,当 FDW 在本地 table 中找不到其他数据时,它将自动将数据从 FDW 插入本地 tables =].通常,我知道你会想在 FDW 中设置一个作业,以便在数据发生变化时将数据推送到下游,但是这个 FDW 中的数据是半易失性的,每小时都会被丢弃然后重新创建(我没有访问或更改它或设置触发器的能力),因此我需要在本地提出解决方案。

您不需要将“my_schema.table2.name”写成两个“.”名称内部将被解释为 database.schema.table.