Hallo zusammen,
ich muß hier nochmal ein Thema zur Diskussion stellen, zu dem schon viel gefragt und gesagt wurde:
Wie erhalte ich den aktuellen Wert einer Sequenz? (bei mir unter 8.3) Atomizität ist mir dabei nicht wichtig.
Bitte keine RTFM-Antworten, das habe ich schon getan. Während es (wohl) unter Postgres 8.0 noch die Möglichkeit gab, ohne vorherige Benutzung von nextval() in derselben Session den aktuellen Wert der Sequenz auszulesen (sofern keine Transaktion gestartet wurde), geht das inzwischen nicht mehr. Ich brauche jedoch den aktuellen Wert, ohne zuvor den Wert der Sequenz zu inkrementieren.
Hintergrund meiner Frage ist, daß ich ich speziellen Fällen bei INSERTs einen "duplicate PK"-error bekomme, obwohl der laut pgAdmin III zuvor angezeigte aktuelle Sequenzwert identisch mit dem höchsten PK war. Wie macht z.B. pgAdmin III das? Gibt es irgendwelche Systemtabellen, wo der aktuelle Wert gespeichert wird.
Nein.
Das ist ein Museums-Rechner ;-)Code:apache:~ # psql -U sgt test Welcome to psql, the PostgreSQL interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help on internal slash commands \g or terminate with semicolon to execute query \q to quit test=> select currval('foo_seq'); ERROR: foo_seq.currval is not yet defined in this session test=> select version(); version --------------------------------------------------------------- PostgreSQL 7.2.1 on i686-pc-linux-gnu, compiled by GCC 2.95.3 (1 row)
Einse Sequence IST eine Tabelle mit nur einer Zeile, Du kannst die Spalten abfragen. Für obiges Museumsstücke:Hintergrund meiner Frage ist, daß ich ich speziellen Fällen bei INSERTs einen "duplicate PK"-error bekomme, obwohl der laut pgAdmin III zuvor angezeigte aktuelle Sequenzwert identisch mit dem höchsten PK war. Wie macht z.B. pgAdmin III das? Gibt es irgendwelche Systemtabellen, wo der aktuelle Wert gespeichert wird.
Code:test=> select * from foo_seq; sequence_name | last_value | increment_by | max_value | min_value | cache_value | log_cnt | is_cycled | is_called ---------------+------------+--------------+---------------------+-----------+-------------+---------+-----------+----------- foo_seq | 2 | 1 | 9223372036854775807 | 1 | 1 | 32 | f | t (1 row)
Andreas
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Oh, das ist mir jetzt aber etwas peinlich. Sooooo einfach!? Und es steht tatsächlich auch im Manual, allerdings in der Dokumentation zu CREATE SEQUENCE.
PostgreSQL: Documentation: Manuals: PostgreSQL 8.3: CREATE SEQUENCE
Vielen Dank, Andreas!
7.2 ist schon eine ganze Weile nicht mehr supported. Wo hast du denn den aufgetrieben? Das muss ja schon knapp 10 Jahre alt sein.
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen