Paul: serial bei insert direkt weitergeben

Hallo,

ich möchte einen neuen Datensatz in eine Postgresql-Tabelle einfügen in der der Primärschlüssel als serial (also ein autowert) definiert ist z.B. als Feld mit dem Namen idcol.
Mein Insert sieht so aus:

  
INSERT INTO tab1 (intcol1, textcol2, textcol3) VALUES (1,'hallo', 'welt');  

Dabei erhält mein Feld idcol automatisch einen Integerwert und muß daher beim Insertbefehl nicht angegeben werden.
Jetzt möchte ich in einem weiteren Schritt für das Insert in einer verknüpften Tabelle diesen erzeugten Wert aus idcol verwenden um den Fremdschlüssel zu befüllen (fcol):

  
INSERT INTO tab2 (fkcol, textcol1, textcol2) VALUES ([???],'xyz', 'tach');  

Wie bekomm ich das hin? Ich habe in dunkler Erinnerung das es hierfür eine SQL-Lösung gibt um den erzeugten Wert direkt weiter zu verwenden.

Dank + Gruß
Paul

  1. Hallo Paul,

    Jetzt möchte ich in einem weiteren Schritt für das Insert in einer verknüpften Tabelle diesen erzeugten Wert aus idcol verwenden um den Fremdschlüssel zu befüllen (fcol):

    Wie bekomm ich das hin? Ich habe in dunkler Erinnerung das es hierfür eine SQL-Lösung gibt um den erzeugten Wert direkt weiter zu verwenden.

    Nutze currval().

    Ist es wirklich so schwierig, im Handbuch die Sequence Manipulation Functions zu finden?

    Freundliche Grüße

    Vinzenz

    1. Danke Vinzenz, das habe ich gesucht!

      Ist es wirklich so schwierig, im Handbuch die Sequence Manipulation Functions zu finden?

      leider ja, wenn man nicht weiß wonach in der Unendlichkeit der Doku zu suchen ist weil einem der Ausdruck fehlt...

      1. Hallo Paul,

        Danke Vinzenz, das habe ich gesucht!

        beim Entwickeln ist es wichtig, effizient suchen zu lernen.

        Ist es wirklich so schwierig, im Handbuch die Sequence Manipulation Functions zu finden?
        leider ja, wenn man nicht weiß wonach in der Unendlichkeit der Doku zu suchen ist weil einem der Ausdruck fehlt...

        Sehr hilfreich ist es, die Doku nicht als unendlich anzusehen. In mir bisher unbekannten Handbüchern schaue ich mir fast immer das Inhaltsverzeichnis an, um mir einen Überblick über deren Aufbau zu verschaffen. Erst danach beginne ich mit der Detailsuche.

        OK, wie fand ich in dem mir bereits bekannten PostgreSQL-Handbuch die von Dir gesuchte Information in weniger als zwei Minuten?

        a) Mir überlegt, dass Serial möglicherweise ein Datentyp sein könnte, weil ich
           wusste, dass PostgreSQL Sequenzen verwendet.
        b) Zwei Möglichkeiten ins Auge gefasst, wie man an den gesuchten Wert kommt:
           1) Rückgabewert einer Funktion
           2) Inhalt einer Sessionvariablen
           Funktion als wahrscheinlicher angesehen.
        c) In Handbuchabschnitt II das Kapitel 8 Data Types geöffnet.
        d) Gleich im ersten Abschnitt "Serial Type" gefunden.
           Verweis auf SEQUENCE gelesen
        e) Auf Funktion getippt und ins Suchfeld "Sequence function" eingetippt.
        f) Erster Treffer: Sequence Manipulation Functions.
           Die erste Funktion in der Liste, currval(), passte auf Deine Frage ...

        Freundliche Grüße

        Vinzenz