Erstellen Sie Alias für PostgreSQL-Tabelle
Ich habe eine Tabelle namens Zuordnungen. Ich würde gerne in der Lage zu Lesen/schreiben, um all die Spalten in dieser Tabelle mit Zuordnungen.Spalte oder Hausaufgaben.Spalte, wie kann ich dies tun?
Ich weiß, das ist nicht etwas, was Sie normalerweise tun würde. Ich muss in der Lage sein, dies zu tun, bieten Abwärtskompatibilität für eine kurze Zeit.
Wir haben eine iOS-app, die im Moment noch direkten postgresql-Abfragen gegen die DB. Aktualisieren wir alle unsere apps zu verwenden, die eine API. In den Prozess der Aufbau der API, die Entwickler entschieden, den Namen zu ändern der Tabellen, da wir (dummerweise) dachte, dass wir nicht brauchen, rückwärts-Kompatibilität.
Nun, V1.0 und die API müssen sowohl in der Lage sein zu schreiben Sie diese Tabelle, so dass ich don ' T haben zu tun, einige voodoo-später transfer/zusammenfassen von Daten später...
Wir verwenden Ruby on Rails, für die API.
- Postgres nicht Synonyme, wie, z.B., Oracle hat. Könnten Sie angeben, was Ihre Verwendung ist genau? Vielleicht ein Blick, könnte den trick tun.
- Hinzugefügt details zu Bearbeiten.
- Einen Blick ist der Weg zu gehen. Sie sollten machen, dass eine Antwort.
- Können Sie insert/update/delete auf eine View?
- Ja - mit Regeln oder Trigger. Hier ist eine neue Frage (und Antwort) auf dba.SE demonstrieren Sie STATTDESSEN Trigger.. eine weitere Antwort mit mehr Erklärung.
- Ich fügte hinzu, eine Antwort auf diesen thread und ich hoffe, Sie können mir helfen, es sauber/und es beenden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit Postgres 9.3 das folgende sollte genügen:
Es funktioniert, weil einfach die Ansichten werden automatisch aktualisierbar (siehe docs).
Aufbauend auf dem work-in-progress:
Trigger-Funktion
Trigger
Notes
Dynamisches SQL (in der
UPDATE
Abschnitt) ist nicht unbedingt notwendig, nur für zukünftige änderungen am Tabellen-layout automatisch. Die Namen der Tabelle und die pk sind immer noch hart codiert.plpgsql Zuweisungs-operator ist
:=
Einfacher und wahrscheinlich billiger ohne sub-block (wie Sie war).
Mit
(SELECT ($1).*)
statt der kürzerenVALUES $1
zu bewahren Spaltennamen.Meine Namenskonvention: ich Schreibe
trg_
für trigger-Funktionen, gefolgt von einer Abkürzung mit Angabe der Zieltabelle und schließlich eine oder mehrere der Token -ins
,up
unddel
fürINSERT
,UPDATE
undDELETE
beziehungsweise. Der name des triggers ist eine Kopie von den Namen der Funktion, ohne die ersten beiden Teile. Dies ist rein eine Frage der Konvention und Geschmack, sondern hat sich als nützlich erwiesen für mich, da die Namen sagen, den Zweck und die sind immer noch kurz genug.Weitere Erläuterungen in den zugehörigen Antworten, die bereits erwähnt wurde:
Update mehrere Spalten, die in einer trigger-Funktion in plpgsql
Dies ist, wo ich bin mit dem trigger-Funktionen, so weit, jedes feedback würde sehr geschätzt werden. Es ist eine Kombination von http://vibhorkumar.wordpress.com/2011/10/28/instead-of-trigger/ und Update mehrere Spalten, die in einer trigger-Funktion in plpgsql
Tabelle: iassignments_assignments
Spalten:
Anzeigen: assignments_published -
SELECT * FROM iassignments_assignments
- Trigger-Funktion für assignments_published
Trigger
Tabelle: iassignments_classes
Spalten:
Anzeigen: assignments_class -
SELECT * FROM assignments_classes
- Trigger-Funktion für assignments_class
**Ich erstelle diese Funktion, sobald ich erhalten feedback auf der anderen-und wissen, es ist zu schaffen, so dass ich (hoffentlich) benötigen nur sehr wenig änderungen an dieser Funktion.
Trigger