Hat Postgre sowas wie die Package in Oracle?
Ich soll für meine Firma prüfen, ob PostgreSQL für eine Migration in Frage kommt. In der Oracle DB haben wir Packages, die ich gern in die PostgreSQL DB rüber nehmen möchte.
Wenn ich versuche eine zu erstellen, kommt folgender Fehler:
FEHLER: Syntaxfehler bei »PACKAGE«
LINE 1: CREATE OR REPLACE PACKAGE PACKAGE_NAME AS
Nach “Package” zu googlen ist etwas schwer, weil es ein so allgemeiner Begriff ist. Ich hoffe, ihr könnt mich helfen.
Von der Syntax her gibt es das nicht. Bei meinem letzten Ausflug in die Oracle-Welt ist mir das Package als Struktur auch nicht über den Weg gelaufen. Welche Funktion/Hierarchieebene stellt das denn dar?
Die Package sind nicht allzu sehr komplex. Ich kann sie auch als einzelne Funktionen/ Prozeduren schreiben. Ich wollte nur meine Vermutung bestätigt wissen, dass PostgreSQL keine Package hat.
Nein, nicht in der kostenlosen Variante. Wenn ich mich recht erinnere bietet EnterpriseDB in einer der kostenpflichtigen Versionen unterstützung für die komplette PL/SQL syntax (inklusive Packages) an.
Übrigens: es heisst entweder Postgres oder PostgreSQL oder pg - niemals das s am Ende weglassen
Aber solange man keine “Package Variablen” verwendet, findet sich eigentlich immer ein brauchbarer Workaround (und selbst für die kann ich mir Alternativen vorstellen)
Wenn es nicht um das “Package” in Package Variable geht, sondern um das “Variable” und die Eigenschaft, diese innerhalb einer Session abrufbar zu haben, dann gibt es sowas glaube ich.
Ich habe es vor ein paar Jahren mal verwendet und erinnere mich nur dunkel, kann ich aber raussuchen bei Bedarf.
Package Variablen wären eine feine Sache, wenn es sie so etwas mehr straight forward gäbe wie bei Oracle.
vermutlich meinst Du custom variable classes. Du kannst z.B. in Deiner postgresql setzen:
my_customer.foo = 10
my_customer.bar = batz
und diese Variablen in der Session setzen bzw. auch abfragen via current_setting(‘my_customer.foo’);
Beispiel:
Du hast einen VIEW, der Daten versch. Kunden enthält. In der View-Definition hast dann ein WHERE data.customer = current_setting(‘my_customer.name’) oder sowas halt. Wenn Du die Variable mit ‘unknown’ oder sowas vorbelegst und in der Session diese Variable noch nicht definiert ist, bekommst halt keine Daten.
Ja, klingt danach, was ich meine. Ich habe noch im Kopf, dass es irgendwie über das OS Environment initialisiert werden musste (oder konnte, weiß ich auch nicht mehr)
Views sind ein super Beispiel, weil sie mit Hilfe derartiger Verfahren einen inneren -non public- Filter bekommen können. Insofern ist nicht das Packaga an sich, aber die Möglichkeiten die es mitbringt, eine feine Sache. Je nach Anwendungsfall kann man damit z.B. schöne stateful Sachen machen.