2016-11-28 25 views
0

Datenbank 1 hat fremde Tabellen a und b in Datenbank 2.Wie würden Sie einen eindeutigen Index für eine Fremdtabelle erstellen?

Wie können wir Indizes für diese fremden Tabellen a und b erstellen. Diese Fremdtabellen sind Wrapper für die Tabellen "Datenbank2.c" bzw. "Datenbank2.d", die über die erforderlichen Indizes verfügen.

Wie würden Sie Indizes für Fremdtabellen a und b erstellen? Ist das überhaupt möglich?

ich ein nicht-Index auf Fremdtabelle ein erstellen können - wenn ich einen einfachen Index erstellen Befehl in Postgres versuchen

+1

Warum würden Sie so etwas wollen? Wenn Tabellen UK auf Datenbank2 haben, warum würden Sie sie in Datenbank1 haben wollen? .. Sie haben bereits eine eindeutige Einschränkung? .. –

+0

Hmmm möglicherweise können Sie diese Frage für mehr Kontext - http: // stackoverflow. com/questions/40803345/deleting-rows-die-tun-haben-nicht-eingang-in-another-tabelle-als-fremden-keys-takes-ein? noredirect = 1 # comment68896624_40803345 – Tisha

+0

so ist es postgres-9.4 dann. Die Planung von Abfragen für Fremdtabellen für Optimierer ist in der Tat sehr begrenzt mit 9.4 (und 9.5). Ich weiß, 9.5 fdw bietet Remote-Joins –

Antwort

1

Sie können nicht Index auf einem fremden Tabelle erstellen, schreiben Sie stattdessen einen Trigger auf Fremdtabelle und erstellen Sie eine lokale Tabelle in Postgres so, dass, wann immer ein Einfügen, Aktualisieren oder Löschen in Ihrer fremden Tabelle passiert, wird es in Ihrer lokalen Tabelle widergespiegelt und indexiert.

+0

Meine lokalen Tabellen haben Indizes. Ich bin mir nicht sicher, dass ich vollständig verstehe, was Sie sagen – Tisha

+0

lokale Tabelle mit derselben Struktur Ihrer Fremdtabelle erstellen, einen Trigger schreiben, so dass alle Daten, die in Ihre Fremdtabelle kommen, in Ihrer lokalen Tabelle repliziert werden. Sie können Index Ihrer lokalen Tabelle hinzufügen – user3837299

+0

Ich habe Ihre Antwort akzeptiert, aber ehrlich gesagt, ich benutze postgres_fdw und füge Abfragen ein, um Daten in meine lokalen Tabellen einzufügen. Diese benötigen nicht einmal fremde Tabellen. – Tisha

1

Das Verknüpfen mit einer fremden Tabelle kann zu langsamen Abfragen führen. Da Indizes keine Option für Fremdtabellen sind, sollten Sie eine materialisierte Ansicht für eine Fremdtabelle erstellen. Materialisierte Ansichten erlauben die Indexierung

CREATE FOREIGN TABLE members_fdw(...) 

CREATE MATERIALIZED VIEW members AS 
     select * from members_fdw 
     WITH DATA 

CREATE UNIQUE INDEX "member_id" ON members USING btree ("id"); 
Verwandte Themen