2017-06-01 2 views
0

Ich habe einen PostgreSQL 9.6 Server Verbindung zu remote 9.3 Server.PostgreSQL fdw und Ansicht, mit Timestamp arbeiten

Ich versuche, die folgende erstellen materialisierte Ansicht:

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

Es ist langsam, da die Filterung auf lokalen Server durchgeführt wird.

Hier ist das EXPLAIN ANALYZE Ergebnis:

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 

Wie Bedingung Filterung auf dem Remote-Server machen?

Hinweis: Remote-Filterung mit einer solchen Abfrage arbeiten:

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)) 

Aber mit diesem, jedes Mal, wenn ich die Ansicht refreh hat das Datum bereits berechnet worden und oben zum Beispiel bleiben bei 2017.05.31 11: 44: 10.89017

Irgendwelche Ideen?

Danke und Grüße

Antwort

0

Von https://www.postgresql.org/docs/current/static/postgres-fdw.html

Um das Risiko von misexecution von Abfragen zu reduzieren, WHERE-Klauseln sind nicht an den Remote-Server gesendet werden, wenn sie nicht nur Datentypen, Operatoren, und Funktionen Diese sind integriert oder gehören zu einer Erweiterung, die in der Option Erweiterungen des Fremdservers aufgelistet ist. Operatoren und Funktionen in solchen Klauseln müssen ebenfalls unwiderruflich sein.

Die Funktion now() ist nicht unveränderbar - es ergibt nicht das gleiche Ergebnis, wenn sich die Parameter nicht ändern.

Wenn Sie wirklich Abfrage mit jetzt() auf Remote-Server ausgeführt senden müssen, können Sie dblink dafür verwenden.

+0

Schön! Danke ! Funktioniert wie ein Zauber, auch wenn fdw einfacher und sicherer ist – Luma

Verwandte Themen