Ergebnis 1 bis 5 von 5

Thema: Aktueller Wert der Sequenz

  1. #1
    ratio ist offline Benutzer
    Registriert seit
    14.08.2009
    Beiträge
    45

    Standard Aktueller Wert der Sequenz

    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.

  2. #2
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.337

    Standard

    Zitat Zitat von ratio Beitrag anzeigen
    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.
    Nein.

    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)
    Das ist ein Museums-Rechner ;-)

    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.
    Einse Sequence IST eine Tabelle mit nur einer Zeile, Du kannst die Spalten abfragen. Für obiges Museumsstücke:

    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
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  3. #3
    ratio ist offline Benutzer
    Registriert seit
    14.08.2009
    Beiträge
    45

    Standard

    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!

  4. #4
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.020

    Standard

    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

  5. #5
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.337

    Standard

    Zitat Zitat von ads Beitrag anzeigen
    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.
    Ja nett, oder?

    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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum