Wählen Sie From Dual in PostgreSQL aus
-
Übersicht
dual
Tisch -
Einführung in den
dualen
Tisch -
Bedeutung der
dual
-Tabelle in PostgreSQL -
Erstellen Sie eine
duale
Tabelle in PostgreSQL
Das heutige Tutorial informiert über die dual
-Tabelle, ihre Bedeutung in PostgreSQL und wie wir in PostgreSQL aus dual
auswählen können.
Übersicht dual
Tisch
In Datenbanksystemen müssen wir manchmal einige Abfragen verwenden, um Daten auszuwählen, die nicht in einer Tabelle vorhanden sind. Beispielsweise können wir die folgende Abfrage ausführen, um das aktuelle Datum und die aktuelle Uhrzeit abzurufen:
select now();
Diese Abfrage verwendet die Anweisung SELECT
ohne das Schlüsselwort FROM
, da sie die Daten aus keiner Tabelle auswählt. Diese Auswahl einer Pseudospalte ist eine gültige Möglichkeit in PostgreSQL.
Einige Datenbankverwaltungssysteme wie Oracle lassen diese Syntax jedoch nicht zu. Stattdessen verlangen sie, dass es eine FROM
-Klausel in der SELECT
-Anweisung geben muss.
Was machen wir also in Oracle, wenn wir grundlegende Anweisungen wie die obige ausführen? Wir verwenden die dual
-Tabelle.
Einführung in den dualen
Tisch
Die dual
-Tabelle ist eine Dummy-Tabelle in Oracle, die verwendet wird, um dem oben beschriebenen Problem zu begegnen.
Es hat nur eine Zeile und eine Spalte mit dem Spaltennamen dummy
und einem Wert von x
, der in der Zeile gespeichert ist, die vom Datentyp VARCHAR2(1)
ist.
Schauen wir uns die dual
-Tabelle in Oracle an. Angenommen, wir möchten eine einfache Berechnung in SQL durchführen. Wir können es auf folgende Weise tun:
select 2*2;
Wenn Sie diese Abfrage jedoch auf Oracle ausführen, erhalten Sie eine Fehlermeldung mit der Aufschrift ORA-00923: FROM-Schlüsselwort nicht gefunden, wo erwartet
. Dies liegt daran, dass wir in Oracle die Klausel FROM
und die Tabelle in der Anweisung SELECT
angeben müssen.
Daher führen wir die folgende Abfrage aus, um dem Fehler entgegenzuwirken:
select 2*2 as result from dual;
Es beseitigt den Fehler, da dual
als Dummy-Tabelle verwendet wird.
In PostgreSQL gibt es keine Einschränkung, die FROM
-Klausel unbedingt in die SELECT
-Anweisung aufzunehmen. Daher können wir die folgende Anweisung ohne Fehler ausführen:
select 2*2 as result;
Warum müssen wir also nach Alternativen zur dual
-Tabelle in PostgreSQL suchen? Diese Frage wird im Folgenden beantwortet.
Bedeutung der dual
-Tabelle in PostgreSQL
Auch wenn PostgreSQL allein die dual
-Tabelle nicht benötigt, können bei der Portierung einer Datenbank von PostgreSQL nach Oracle oder umgekehrt Probleme auftreten.
Eine Organisation möchte möglicherweise ihre Datenbank aufgrund von Skalierbarkeitsproblemen und Modernisierung von einem Datenbankverwaltungssystem zu einem anderen migrieren. Zu diesem Zweck müssen wir jedoch auch die Kompatibilität beider Plattformen berücksichtigen.
Ein Kompatibilitätsproblem ist die dual
-Tabelle, die in Oracle, aber nicht in PostgreSQL vorhanden ist. Wenn Code von einer Plattform auf eine andere migriert wird, werden daher garantiert Fehler produziert.
Der folgende Code läuft beispielsweise perfekt auf Oracle, führt aber zu einem Fehler in PostgreSQL:
select 2*2 as result from dual;
Dies liegt daran, dass PostgreSQL das Weglassen des Schlüsselworts FROM
in der SELECT
-Anweisung zulässt, sodass die dual
-Tabelle dort nicht existiert. Daher erzeugt die Auswahl daraus einen Fehler.
Ebenso wird eine einfache select 2*2
-Abfrage, die in PostgreSQL einwandfrei funktioniert, als fehlerhaft betrachtet, wenn sie in Oracle ausgeführt wird. Wie bereits erläutert, ist es in Oracle erforderlich, die FROM
-Klausel in die SELECT
-Anweisung aufzunehmen.
Um die Datenbankmigration zwischen diesen Plattformen kompatibel zu machen, müssen wir daher nach Alternativen in PostgreSQL suchen. Die Lösung ist jedoch einfach: Da wir in PostgreSQL keine duale
Tabelle haben, können wir eine erstellen.
Erstellen Sie eine duale
Tabelle in PostgreSQL
Ja, die Lösung für dieses Kompatibilitätsproblem ist so einfach wie das Erstellen einer dualen
Tabelle in der PostgreSQL-Datenbank, genau wie die in Oracle. Wir können dies auf folgende Weise tun:
CREATE TABLE public.dual ( dummy varchar);
Wir haben eine Spalte namens dummy
vom Datentyp varchar
eingefügt. Wir werden sie nun ebenfalls mit einem Dummy-Wert füllen, ähnlich der dual
-Tabelle in Oracle:
insert into dual values ('X');
Lassen Sie uns testen, ob dies funktioniert, indem Sie die folgende Abfrage ausführen, die uns zuvor einen Fehler in PostgreSQL gab:
select 2*2 as result from dual;
Es funktioniert jetzt! Es entfernt die Auswahl aus dem dualen
Kompatibilitätsproblem zwischen PostgreSQL und Oracle.
Alternativ können wir in PostgreSQL statt einer Tabelle auch eine dual
-Ansicht erstellen. Dies geschieht auf folgende Weise:
CREATE VIEW public.dual AS
SELECT 'X'::varchar AS dummy;
Hier wählen wir in der Definition der dual
-Ansicht eine Dummy-Variable varchar
aus, genau wie die, die wir in der dual
-Tabelle in Oracle haben. Lassen Sie uns sehen, ob dies funktioniert, indem Sie diese Abfrage erneut ausführen:
select 2*2 as result from dual;
Wie erwartet funktioniert das auch! Daher können wir in PostgreSQL entweder eine Tabelle oder eine Ansicht erstellen, die genauso funktioniert wie die duale
Tabelle in Oracle.
Schauen wir uns andere Beispiele für die Auswahl von Pseudospalten mit einer dual
-Tabelle in PostgreSQL an, um zu sehen, ob es in allen Fällen funktioniert.
Im folgenden Beispiel versuchen wir, das aktuelle Datum und die aktuelle Uhrzeit mit der folgenden Abfrage auszuwählen:
select now() from dual;
Es gibt die folgende Ausgabe:
Wir können den aktuellen Benutzer der Datenbank auch auf folgende Weise auswählen:
select user from dual;
Es gibt die folgende Ausgabe:
Wir haben also besprochen, dass die dual
-Tabelle in einigen Datenbankverwaltungssystemen wie Oracle benötigt wird, die die Angabe einer FROM
-Klausel erfordern.
Um Kompatibilitätsproblemen entgegenzuwirken, haben wir gelernt, wie wir in PostgreSQL eine duale
Dummy-Tabelle oder -Ansicht erstellen können. Wir hoffen, dass Sie diese Konzepte gründlich verstehen konnten. Lerne weiter!
Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!
GitHub