+ Antworten
Ergebnis 1 bis 5 von 5

Thema: Default Cast abschalten

  1. #1
    traxanos ist offline Benutzer
    Registriert seit
    27.05.2008
    Beiträge
    87

    Standard Default Cast abschalten

    Hi

    ich habe folgende Problem. Wenn ich eine Tabelle erstellen und einem Feld ein Defaultwert hinterlege, wird dieser immer gecastet.

    Code:
    CREATE TABLE soeintest
    (
       test character varying NOT NULL DEFAULT '456'
    );
    
    wir zu

    Code:
    CREATE TABLE soeintest
    (
      test character varying NOT NULL DEFAULT '456'::character varying
    );
    
    Da ich ein Framework verwende, welches den Defaultwert ausliest, sind meine Formular immer mit '456'::character varying vor ausgefüllt statt wie gewollt 456.

    Das war früher nicht so. Aktuell verwende ich 8.4 aus dem MacPorts, sowie Debian 5 mit 8.3. Auf beiden ist das Problem reproduzierbar.

  2. #2
    akretschmer ist offline Erfahrener Benutzer
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    4.473

    Standard

    Zitat Zitat von traxanos Beitrag anzeigen
    Hi

    ich habe folgende Problem. Wenn ich eine Tabelle erstellen und einem Feld ein Defaultwert hinterlege, wird dieser immer gecastet.

    Code:
    CREATE TABLE soeintest
    (
       test character varying NOT NULL DEFAULT '456'
    );
    
    wir zu

    Code:
    CREATE TABLE soeintest
    (
      test character varying NOT NULL DEFAULT '456'::character varying
    );
    
    Da ich ein Framework verwende, welches den Defaultwert ausliest, sind meine Formular immer mit '456'::character varying vor ausgefüllt statt wie gewollt 456.

    Das war früher nicht so. Aktuell verwende ich 8.4 aus dem MacPorts, sowie Debian 5 mit 8.3. Auf beiden ist das Problem reproduzierbar.
    Schnellschuß:

    Code:
    test=*# select regexp_replace(column_default,'::.*','') from information_schema.columns where table_name='soeintest' and column_name='test';
     regexp_replace
    ----------------
     '456'
    (1 row)
    
    Also, schnipple das da einfach weg, wenn es stört. Wäre dies eine Lösung?

    Andreas
    --
    Papa-Kind-Kur vom 8. bis 29. September ;-)
    PostgreSQL Hosting
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    http://www.amazon.de/gp/registry/2APKFICAIYMWB
    https://www.xing.com/profile/Andreas_Kretschmer7

  3. #3
    traxanos ist offline Benutzer
    Registriert seit
    27.05.2008
    Beiträge
    87

    Standard

    Hi

    danke erstmal. Gibt es eine Möglichkeit das column_default zu eval'en, da jetzt noch die SignleQuotes vorhanden sind?
    Aber generelle woher kommt das? Gibt es nicht eine Lösung dafür? Weil es muss ja nichts gecastet werden.

  4. #4
    akretschmer ist offline Erfahrener Benutzer
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    4.473

    Standard

    Zitat Zitat von traxanos Beitrag anzeigen
    Hi

    danke erstmal. Gibt es eine Möglichkeit das column_default zu eval'en, da jetzt noch die SignleQuotes vorhanden sind?
    Aber generelle woher kommt das? Gibt es nicht eine Lösung dafür? Weil es muss ja nichts gecastet werden.
    Es sind mit 8.2 eine Reihe von implizieten CASTs entfernt worden, um eine striktere Typ-Prüfung zu erzwingen. Vermutlich rührt es daher.

    Andreas
    --
    Papa-Kind-Kur vom 8. bis 29. September ;-)
    PostgreSQL Hosting
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    http://www.amazon.de/gp/registry/2APKFICAIYMWB
    https://www.xing.com/profile/Andreas_Kretschmer7

  5. #5
    traxanos ist offline Benutzer
    Registriert seit
    27.05.2008
    Beiträge
    87

    Standard

    Also aktuell lade ich die Daten mit:
    Code:
    SELECT a.attname, format_type(a.atttypid, a.atttypmod), d.adsrc, a.attnotnull
                  FROM pg_attribute a LEFT JOIN pg_attrdef d
                    ON a.attrelid = d.adrelid AND a.attnum = d.adnum
                 WHERE a.attrelid = 'soeintest'::regclass
                   AND a.attnum > 0 AND NOT a.attisdropped
                 ORDER BY a.attnum
    
    d.adsrc müsste nur executed werden. Dann Patch ich das im Framework und gut.

+ Antworten

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