Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL fdw和视图,使用时间戳_Postgresql_Postgres Fdw - Fatal编程技术网

PostgreSQL fdw和视图,使用时间戳

PostgreSQL fdw和视图,使用时间戳,postgresql,postgres-fdw,Postgresql,Postgres Fdw,我有一台PostgreSQL 9.6服务器连接到远程9.3服务器 我正在尝试创建以下物化视图: CREATE MATERIALIZED VIEW test AS SELECT id FROM remote.logs WHERE remote.logs.created_at > (now() - interval '1 day') 这很慢,因为过滤是在本地服务器上完成的 以下是解释分析结果: Foreign Scan on integration.logs (cost=100

我有一台PostgreSQL 9.6服务器连接到远程9.3服务器

我正在尝试创建以下物化视图:

CREATE MATERIALIZED VIEW test AS
  SELECT id
  FROM remote.logs
  WHERE remote.logs.created_at > (now() - interval '1 day')
这很慢,因为过滤是在本地服务器上完成的

以下是解释分析结果:

Foreign Scan on integration.logs  (cost=100.00..219.69 rows=975 width=4)
  Output: id
  Filter: (logs.created_at > (now() - '1 day'::interval))
  Remote SQL: SELECT id, created_at FROM public.logs
如何在远程服务器上进行条件筛选

注意:远程筛选正在处理这样的查询:

CREATE MATERIALIZED VIEW test AS
  SELECT id
  FROM integration.logs
  WHERE integration.logs.created_at > (timestamp 'now()' - interval'1 day')

Foreign Scan on integration.logs  (cost=100.00..166.06 rows=975 width=4)
  Output: id
  Remote SQL: SELECT id FROM public.logs WHERE ((created_at > '2017-05-31 11:44:10.89017'::timestamp without time zone))
但有了这个,每次我重新构建视图时,日期都已经计算过了,并停留在上面的2017-05-31 11:44:10.89017

有什么想法吗

感谢并问候

为了减少错误执行查询的风险,WHERE子句不是 发送到远程服务器,除非它们仅使用数据类型、运算符、, 以及内置的或属于 在外部服务器的扩展选项中列出。操作员和 这些子句中的函数也必须是不可变的

函数
now()
不是不可变的-如果参数不变,它不会给出相同的结果


如果您确实需要在远程服务器上执行now()来发送查询,那么您可以使用它。

Nice!谢谢你!即使fdw更简单、更安全,它也像一个符咒