PostgreSQL konvertiert den Datensatz in den Composite-Typ

8

Wie wir wissen, gibt es eine einfache Möglichkeit, einen beliebigen Datensatz in den entsprechenden zusammengesetzten Typ in PostgreSQL zu konvertieren:

%Vor%

Aber eine Unannehmlichkeit dabei ist, dass - wenn der Zieltyp geändert wird (z. B. ein Feld hinzugefügt wird) - der Cast dann bricht: (

%Vor%

CREATE CAST für diesen Fall kann helfen, aber ich kann keinen Pseudo-Typ wie RECORD als Argument an eine Casting-Funktion übergeben. Und weder Typ-Vererbung noch Standardwerte für zusammengesetzte Typen (wie Tabelle) funktionieren auch. Gibt es einen anderen Weg, hier Kompatibilität zu erreichen?

Natürlich ist es möglich, explizite Cast-Funktionen wie CREATE FUNCTION test.to_t_test(t text, i integer, c char DEFAULT '') RETURNS test.t_test zu verwenden und dann

%Vor%

Verwenden Sie dann Standardparameterwerte. Aber dieser Weg ist weder klar noch angenehm.

    
begemoth 10.04.2014, 07:01
quelle

1 Antwort

2

Ich empfehle Ihnen, wenn Sie dies tun müssen, einen der folgenden Ansätze zu wählen:

  1. Dynamische Erkennung der Struktur (mithilfe der Katalogtabelle pg_attribute). Dies ist nicht garantiert Zukunftssicherheit, aber wahrscheinlich ist es. Es hat auch eine Reihe von Fehlern (verwenden Sie keine Attribute mit einem Attnum von weniger als 0). Dies ist normalerweise der Ansatz, den ich verwende, und habe Bibliotheken in Perl geschrieben, um solche Discovery auf Client-Seite durchzuführen.

  2. Erstellen Sie einen Benutzertyp und einen Speichertyp und haben Sie eine Umwandlung zwischen ihnen. So können Sie einen SELECT ('text', 10) :: test.used_test :: test.stored_test machen, und das funktioniert gut. Es gibt jedoch einen Grund, warum Sie einen Datensatz nicht in einen zusammengesetzten Typ umwandeln können.

Chris Travers 19.03.2016 09:10
quelle

Tags und Links