【发布时间】:2023-04-01 20:14:01
【问题描述】:
我有一个使用tds_fdw 创建的外部数据表,它将 MSSQL 服务器上的 SQL 视图映射到 Postgres 中的外部表。我可以毫无问题地查看和查询该表中的数据。但是,当我尝试从连接外部表和其他几个表的查询中查询此表时,出现此错误。
错误是:
[2020-07-28 14:04:25] [HV00L] ERROR: DB-Library error: DB #: 20018, DB Msg: General SQL Server error: Check messages from the SQL Server, OS #: -1, OS Msg: , Level: 15
[2020-07-28 14:04:25] [00000] DB-Library notice: Msg #: 156, Msg state: 1, Msg: Incorrect syntax near the keyword 'as'., Server: DB1DBSSVR1, Process: , Line: 1, Level: 15
这就是 SQL 查询的样子
SELECT COL1, COL2, COL3 FROM (
SELECT a.COL1, b.COL2, c.COL3 FROM
PSQL_TABLE_1 a JOIN PSQL_TABLE_2 b ON a.ID = b.ID
JOIN FOREIGN_TABLE f on b.ID = f.CODE WHERE a.COL5 = 'S'
UNION ALL
SELECT a.COL1, b.COL2, c.COL3 FROM
PSQL_TABLE_1 a JOIN PSQL_TABLE_3 b ON a.ID = b.ID
JOIN FOREIGN_TABLE f on b.ID = f.CODE WHERE a.COL5 = 'S'
)
DERIVED WHERE DERIVED.SEQ_NO = 'xxxx'
注意
早些时候,这个查询使用了一个本地 pg 表,它与外部表具有相同的名称和结构,并且工作正常。此问题在重命名并创建具有相同名称和结构的新外部表后开始
【问题讨论】:
-
这个查询在哪里运行,在 SQL Server 或 Postgres 上?错误还说:
Incorrect syntax near the keyword 'as'.并且您显示的查询中没有as。这是来自视图查询吗?还有你从哪个日志中得到错误? -
@Adrian 查询在 Postgres 上执行。错误来自我展示的查询。我从 Postgres 日志中收到此错误。我正在运行 tds_fdw 并启用了日志消息
-
嗯,错误很明显,问题出在
as关键字附近。我在查询中没有看到as。那么,您确定在匿名化查询时没有将其编辑掉吗?您是否还按照消息提示检查了 SQL Server 日志? -
另见答案。
-
@Isuru Pathirana 。很确定这与通过
tds_fdw运行有关,更何况现在你说在本地运行它所有工作。根据我在下面的评论,您是否尝试过将DERIVED重命名为DERIVED_TABLE之类的名称?
标签: sql-server postgresql freetds foreign-data-wrapper