Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: CREATE SEQUENZE fehler

  1. #1
    Sergius ist offline Neuer Benutzer
    Registriert seit
    19.06.2011
    Beiträge
    16

    Standard CREATE SEQUENZE fehler

    Hallo,

    ich habe ein kleines PL/PgSQL Skript geschrieben, hier ein Ausschnitt davon:
    (PostgreSQL 8.4.7)

    Code:
    .....
    EXECUTE 'CREATE TABLE "' || tablename || '" ( LIKE "' || tablename_data || '" INCLUDING INDEXES )';
    
    tablename_seq := tablename || '_id_seq';
    
    EXECUTE 'CREATE SEQUENCE "' || tablename_seq || '"';
    EXECUTE 'ALTER TABLE "' || tablename || '" ALTER COLUMN id SET DEFAULT NEXTVAL(' || quote_literal(tablename_seq) || ')';
    ....
    Beim Ausführen kommt immer dieser Fehler:

    SQL-Fehler:


    ERROR: relation "data_optimized_dagobert1_filesystem_/local/nfss-local-links/sha" already exists
    CONTEXT: SQL statement "CREATE SEQUENCE "data_optimized_dagobert1_filesystem_/local/nfss-local-links/share_id_seq""
    PL/pgSQL function "optimize" line 33 at EXECUTE statement


    Und das obwohl die Tabelle und Sequenz mit dem Namen noch gar nicht existieren.
    Weiss eienr woran es liegen kann ?
    Evtl an Länge der Sequenz ? Begrenzt auf 64 Zeichen ?

    viele Grüsse,
    Sergius

  2. #2
    Sergius ist offline Neuer Benutzer
    Registriert seit
    19.06.2011
    Beiträge
    16

    Standard

    Mittlerweile habe ich rausgefunden, dass es nur die ersten 64 Zeichen gespeichert werden, auch wenn man mehr eingibt.

    Also
    CRETE SEQUENZE "abcd.....64abc" // 67 Zeichen lang
    das gleiche ist wie
    CRETE SEQUENZE "abcd.....64def" // 67 Zeichen lang

    deswegen kommt diese Meldung mit already exists.

    Gibt es denn in PostgresSQL eine Möglichkeit "längere" Sequenzen abzuspeichern ?

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

    Standard

    Du könntest theoretisch PostgreSQL neu compilieren und NAMEDATALEN ändern.
    Aber: wieso reichen dir 64 Zeichen nicht?
    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

  4. #4
    Sergius ist offline Neuer Benutzer
    Registriert seit
    19.06.2011
    Beiträge
    16

    Standard

    Zitat Zitat von ads Beitrag anzeigen
    Du könntest theoretisch PostgreSQL neu compilieren und NAMEDATALEN ändern.
    Aber: wieso reichen dir 64 Zeichen nicht?
    Die Tabellen werden dynamisch erstellt anhang von bestimmten Kriterien,
    die Namen werden also so generiert, dass die Tabellen wiedererkannt werden,
    und es kommen teilweise bis zu 128 Zeichen.

    Neukompilieren kommt leider nicht in die Frage.

    Dann muss ich mir wohl was anderes überlegen.

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

    Standard

    Zitat Zitat von Sergius Beitrag anzeigen
    Dann muss ich mir wohl was anderes überlegen.
    Einfach: nur maximal 63 Zeichen generieren ;-)
    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

  6. #6
    Sergius ist offline Neuer Benutzer
    Registriert seit
    19.06.2011
    Beiträge
    16

    Standard

    Zitat Zitat von ads Beitrag anzeigen
    Einfach: nur maximal 63 Zeichen generieren ;-)
    Wenn die Welt so einfach wäre :-)

    Die Sequenzen Namen setzen sich ungefähr so zusammen:
    data_optimized_[rechnername]_[category]_[mountpoint]_id_seq

    Beispiel:
    data_optimized_dagobert1_filesystem_/local/nfss-local-links/share_id_seq

    Man könnte jetzt natürlich anstatt von "data_optimized_" ein "do_" machen und am ende anstatt von "_id_seq" ein "_s".
    Aber die Mountpoints können viel Länger sein, und werden die Länge sprengen.
    Die kann ich nicht kürzen, da wie gesagt alles dynamisch ist und die müssen uniq sein und wiedererkannt werden.

    Die einzelne Lösung die ich gerade sehe, eine Extra Tabelle zu machen, die dann diese Namen speichert und die Sequenz Namen an sich dann ungefähr so zu machen:
    ...dagobert1_0001_seq - ...dagobert1_9999_seq
    Aber das ist dann auch ein Hack.

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

    Standard

    Das ist sowieso ungünstig. Was ist, wenn dein Verzeichnisname Sonderzeichen enthält?
    Nimm irgendwelche Prüfsummen dafür, das grenzt das ganze sogar auf eine begrenzte Länge ein.
    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

  8. #8
    Sergius ist offline Neuer Benutzer
    Registriert seit
    19.06.2011
    Beiträge
    16

    Standard

    Zitat Zitat von ads Beitrag anzeigen
    Das ist sowieso ungünstig. Was ist, wenn dein Verzeichnisname Sonderzeichen enthält?
    Nimm irgendwelche Prüfsummen dafür, das grenzt das ganze sogar auf eine begrenzte Länge ein.
    Ich muss ja im weiteren Verlauf wieder auf die Namen kommen und die Prüfsumme ist nicht zurückkonvertierbar.

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

    Standard

    Dann nimm auf jeden Fall irgendwelche IDs und halte die eigentlichen Namen in einer Tabelle vor.
    Alles andere eröffnet dir zu viele Probleme - speziell mit ungefilterten Eingaben.
    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

  10. #10
    Sergius ist offline Neuer Benutzer
    Registriert seit
    19.06.2011
    Beiträge
    16

    Standard

    [QUOTE=ads;28383]Dann nimm auf jeden Fall irgendwelche IDs und halte die eigentlichen Namen in einer Tabelle vor.
    Alles andere eröffnet dir zu viele Probleme - speziell mit ungefilterten Eingaben.[/QUOTE

    "Die einzelne Lösung die ich gerade sehe, eine Extra Tabelle zu machen, die dann diese Namen speichert und die Sequenz Namen an sich dann ungefähr so zu machen:
    ...dagobert1_0001_seq - ...dagobert1_9999_seq
    Aber das ist dann auch ein Hack."

    Hatte ich ja vor :-)

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 13.02.2012, 16:18
  2. Prüfung vor CREATE TABLE
    Von peter999 im Forum SQL
    Antworten: 27
    Letzter Beitrag: 25.06.2009, 15:31
  3. create view
    Von SIJ im Forum SQL
    Antworten: 7
    Letzter Beitrag: 30.04.2009, 13:36
  4. Create Database mit Java
    Von -]NAS[- im Forum Programmierung
    Antworten: 10
    Letzter Beitrag: 14.06.2008, 00:56
  5. Create Sequence
    Von methusalem im Forum SQL
    Antworten: 8
    Letzter Beitrag: 25.06.2007, 11:35

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