Erklärung gesucht

Allgemeines zu PostgreSQL.

Erklärung gesucht

Beitragvon symbiont » Mi 30. Jul 2008, 09:41

ich hab da mal ne Frage,

gestern musste ich zu einer existierenden Tabelle mit Daten ein id-feld dazu erfinden und fuellen. das hat dummerweise auch noch geklappt, obwohl ich die chancen schlecht einschaetze.

und zwar hab ich en integer feld dazu ge-ALTER't und dann mit
Code: Alles auswählen
UPDATE table
set id = nextVal('sequence');
initialisiert, was doch eigentlich nicht funktionieren sollte, da z.B. ein

Code: Alles auswählen
UPDATE table t
set zahl = <subquery s where s correlates t>;
den "Ausdruck" - hier eine subquery - auch nur ein einziges mal fuer die gesamte UPDATE-Operation ausfuehrt.
Ich meine - schoen das es mir geholfen hat - aber irgendwie ist das verhalten doch nicht konsistent. Zu erwarten war, dass nextVal einen Wert geliefert haette mit dem dann die gesamte range des Update initialisiert würde.

Warum also ist das dort anders?

War'n die PG-Entwickler betrunken - so dass sie plötzlich - angesteckt von der Einfachheit des Seins - pragmatische Lösungen entwickelten ? :D

[edit] ich glaube ich hab nen denkfehler ... weil ich an ein spezielles problem gedachte habe .. die subquery wird auch fuer jede row ausgefuehrt .. nur wenn sie z.B. auf die update-table laeuft, dann sieht die nur all das VOR dieser transaktion .. und daher kann ich z.B. schlecht nummern aus der subquery ueber das count der datensaetze erzeugen, die ich bereits geupdated habe ..
symbiont
Erfahrener Benutzer
 
Beiträge: 1328
Registriert: Mo 17. Mär 2008, 12:45
Wohnort: NULL

Beitragvon ads » Mi 30. Jul 2008, 10:39

Du denkst richtig. Und nextval() ist als eine der wenigen Dinge in PG nicht "transaktionssicher". Daher: bei jedem neuen Aufruf pro Row bekomst du jetzt einen neuen Wert geliefert und dieser wird in die Zeile geschrieben.
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören Bild

Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

PostgreSQL Service & Support
ads
Erfahrener Benutzer
 
Beiträge: 4147
Registriert: Mi 8. Feb 2006, 11:58
Wohnort: MD

Beitragvon akretschmer » Mi 30. Jul 2008, 11:59

symbiont hat geschrieben:ich hab da mal ne Frage,

gestern musste ich zu einer existierenden Tabelle mit Daten ein id-feld dazu erfinden und fuellen. das hat dummerweise auch noch geklappt, obwohl ich die chancen schlecht einschaetze.



War'n die PG-Entwickler betrunken - so dass sie plötzlich - angesteckt von der Einfachheit des Seins - pragmatische Lösungen entwickelten ? :D



nextval() ist eine Funktion, die einen Wert liefert. Eine Query kann mehrere Werte liefern.

Andreas
--
ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)

https://www.xing.com/profile/Andreas_Kretschmer7
Hosting-Provider mit PostgreSQL-Support gesucht? Mich fragen!
akretschmer
Erfahrener Benutzer
 
Beiträge: 5938
Registriert: So 29. Okt 2006, 14:35
Wohnort: Kaufbach, Sachsen, Germany, Germany

Weil

Beitragvon symbiont » Mi 30. Jul 2008, 13:53

akretschmer hat geschrieben:nextval() ist eine Funktion, die einen Wert liefert. Eine Query kann mehrere Werte liefern.

Andreas


mit Dir Streiten soviel spass macht :

sowenig wie ein select unbedingt "mehrere Werte" liefert, muss auch eine funktion nicht immer nur "einen Wert" liefern.

aber ja - die transaktions-diffundierende eigenschaft der sequence ist die erklaerung - schade, dass es nicht möglich ist sequenzen transaktionssicher zu definieren. Oder doch ?

Was ist denn nun eigentlich durlaessig - die funktion nextVal() ? oder die sequenz ansich?
symbiont
Erfahrener Benutzer
 
Beiträge: 1328
Registriert: Mo 17. Mär 2008, 12:45
Wohnort: NULL

Beitragvon ads » Mi 30. Jul 2008, 21:15

Sequenzen sind mit Bedacht nicht in Transaktionen gekapselt.

Der Grund ist: es gibt extra kein Locking für die Sequenzen und damit kann die Sequenz keine andere Transaktion blockieren.
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören Bild

Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

PostgreSQL Service & Support
ads
Erfahrener Benutzer
 
Beiträge: 4147
Registriert: Mi 8. Feb 2006, 11:58
Wohnort: MD


Zurück zu Allgemeines

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

cron