Oracle-Package in PostgreSQL

Hallo,

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.

lg
Lara

Hallo!

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?

Gruß Uwe

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.

Danke für deine schnelle Antwort. :slight_smile:

Lg
Lara

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 :slight_smile:

Damit kann man Funktionen/Prozeduren “gruppieren”.
Using PL/SQL Packages

EnterpriseDB bietet einen sehr gut funktionierenden Oracle-Support in PostgreSQL an.
Der Advanced Server kann das.

Habe selbst bereits damit bei einem Kunden gearbeitet.

Gibt es in PostgreSQL 12 mittlerweile Packages?

Nein, gibt es nicht.

Aber solange man keine “Package Variablen” verwendet, findet sich eigentlich immer ein brauchbarer Workaround (und selbst für die kann ich mir Alternativen vorstellen)

1 Like

@castorp, Package Variablen gibt es demnach auch nicht, oder?

Wie soll es die geben, wenn es keine Packages gibt?

Aber wie gesagt: im Regelfall finden sich andere Lösungen für dieses Problem, aber ohne konkrete Beispiele ist das fast unmöglich zu beantworten.

1 Like

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.