Slo*_*vic 5 postgresql postgresql-extensions citus
是否可以使用 PostgreSQL 中的 citus 扩展来创建复制到每个工作节点的临时表(如引用表)?
当我像这样运行 SQL 时:
DROP TABLE IF EXISTS mypoint;
CREATE TEMP TABLE mypoint (mpoint geometry primary key);
SELECT create_reference_table('mypoint');
Run Code Online (Sandbox Code Playgroud)
我收到错误:
Run Code Online (Sandbox Code Playgroud)ERROR: unacceptable schema name "pg_temp_6" DETAIL: The prefix "pg_" is reserved for system schemas. CONTEXT: while executing command on mynode01:5432 SQL state: 42939
我问这个问题的原因是因为之后有更多的 SQL 命令,我需要在临时表和分布式表之间进行联接(citus 扩展不允许这样做)。
事实证明,从 citus 7.3 开始,无法创建引用或将临时表分发给工作节点。
有两种可能的解决方法:
由于我需要亚秒级查询来获取用户响应,因此第一个选项对我来说效果更好。
以下是我如何修改查询的示例:
DROP TABLE IF EXISTS myresult1;
CREATE TEMP TABLE myresult1 AS
select mpoint, mgrsid, st_distance(mgrspoint, mpoint) as distance from fact_point_kpi
inner join mypoint on st_dwithin(mgrspoint, mpoint, 0.001)
ORDER BY mpoint, distance;
--becomes =>
DROP TABLE IF EXISTS myresult1;
CREATE TEMP TABLE myresult1 AS
SELECT mpoint, mgrsid, st_distance(mgrspoint, mpoint) AS distance
FROM (SELECT mpoint FROM mypoint) AS mptmp
JOIN fact_point_kpi ON st_dwithin(mgrspoint, mptmp.mpoint, 0.001)
ORDER BY mptmp.mpoint, distance;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
584 次 |
最近记录: |