1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Änderung der länge eines Datentypen möglich ?

Dieses Thema im Forum "PostgreSQL" wurde erstellt von mickyturbo, 2 Februar 2018.

  1. mickyturbo

    mickyturbo Fleissiger Benutzer

    Hallo,

    ich habe software_lizenzen dies wird vererbt auf die z.B
    software_lizenzen_pe = programme
    software_lizenzen_bs = Betriebssystem

    jetzt habe ich festgestellt das in software_lizenzen_pe der KEY auf eine länge 64 und character varying ist.

    bin zu software_lizenzen properties und habe versucht spalte KEY die länge zu ändern, bekomme dann folgende Fehlermeldung:

    FEHLER: Typ einer Spalte, die von einer Sicht oder Regel verwendet wird, kann nicht geändert werden
    DETAIL: Regel _RETURN für Sicht software_all hängt von Spalte „key“ ab

    Verstehe ich das richtig, diese Fehlermeldung sagt mir das aus dem Views software_all hängt von spalte key ab, was haben die views damit zu tun ?

    software_all:
    SELECT m.type,
    l.type_serial,
    l.sw_id,
    m.name AS sw_name,
    edn.name AS e_name,
    n.serial AS e_serial,
    l.serialnr,
    l.key,
    l.comment
    FROM software_main m,
    software_licenses l
    LEFT JOIN equipment n ON l.equipmentnr = n.serial
    LEFT JOIN equipmentdata_name edn ON n.serial = edn.serial
    WHERE l.sw_id = m.id
    ORDER BY m.type, l.type_serial;

    kann ich key in seiner länge ändern ?

    Vielen dank
    Micky
     
  2. akretschmer

    akretschmer Datenbank-Guru

    zeige bitte die Ausgabe von \d+ <tabelle> der beteiligten Tabellen.
     
  3. mickyturbo

    mickyturbo Fleissiger Benutzer

    =# \d+ software_licenses

    Tabelle „public.software_licenses“

    Spalte | Typ | Attribute | Speicherung | Statistikziel | Beschreibung

    -------------+-----------------------+-----------+-------------+---------------+--------------

    sw_id | integer | not null | plain | |
    type_serial | integer | not null | plain | |
    serialnr | character varying(64) | | extended | |
    key | character varying(64) | | extended | |
    comment | character varying(64) | | extended | |
    equipmentnr | integer | | plain | |

    Fremdschlüssel-Constraints:
    "sw_lic_eq_nr_fkey" FOREIGN KEY (equipmentnr) REFERENCES equipment(serial) ON UPDATE CASCADE ON DELETE SET NULL

    "sw_lic_sw_id_fkey" FOREIGN KEY (sw_id) REFERENCES software_main(id) ON UPDATE CASCADE ON DELETE CASCADE

    Kindtabellen:
    software_licenses_av,
    software_licenses_bp,
    software_licenses_ca,
    software_licenses_cl,
    software_licenses_hp,
    software_licenses_ma,
    software_licenses_me,
    software_licenses_mv,
    software_licenses_of,
    software_licenses_os,
    software_licenses_pe,
    software_licenses_sm,
    software_licenses_vp,
    software_licenses_zp
     
    Zuletzt bearbeitet: 2 Februar 2018
  4. akretschmer

    akretschmer Datenbank-Guru

    welche Version?

    Code:
    test=# create table master(id int primary key, data varchar(10));
    CREATE TABLE
    test=*# create table master1 () inherits (master);
    CREATE TABLE
    test=*# create table master2 () inherits (master);
    CREATE TABLE
    test=*# commit;
    COMMIT
    test=# alter table master alter COLUMN data type varchar(20);
    ALTER TABLE
    test=*#
    
    Das ist 9.5. Möglicherweise geht das mit älteren Versionen nicht, hab jetzt die Release Notes nicht gelesen.
     
  5. mickyturbo

    mickyturbo Fleissiger Benutzer

    ok, kann ich das Management DB updaten ?
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Deine Fehlermeldung scheint eher darauf hinzuweisen, daß ein VIEW existiert:

    Code:
    test=# create view master_view as select * from master;
    CREATE VIEW
    test=*# alter table master alter COLUMN data type varchar(40);
    FEHLER:  Typ einer Spalte, die von einer Sicht oder Regel verwendet wird, kann nicht geändert werden
    DETAIL:  Regel _RETURN für Sicht master_view hängt von Spalte »data« ab
    test=*#
    
    Hier ist in der Tat zuerst die View zu löschen und dann neu zu erstellen.
     
  7. akretschmer

    akretschmer Datenbank-Guru

    Bitte was?
     
  8. mickyturbo

    mickyturbo Fleissiger Benutzer

    Ok, den view zu löschen bekomm ich hin.
    Danke & Gebe feedback
     
  9. mickyturbo

    mickyturbo Fleissiger Benutzer

    Danke hat nach dem löschen der genannten view geklappt!
     
  10. akretschmer

    akretschmer Datenbank-Guru

    noch einige Tipp:

    • jede Tabelle sollte einen PK haben
    • in der Abfrage in #1 mixt Du impliziete und expliziete Joins. Verwende nach Möglichkeite immer expliziete Joins, also schreibe Joins immer in der Join-Syntax
    • in software_licenses scheint ein Index auf sw und und auch auf equipmentnr zu fehlen
    • Text-Datentypen mit fester Länge sind praktisch, wenn da feste Constraints existieren, die du durchsetzen willst. Aber eher unpraktisch bei Feldern wie comment.
     
    mickyturbo gefällt das.
  11. mickyturbo

    mickyturbo Fleissiger Benutzer

    danke nochmal
     
  12. mickyturbo

    mickyturbo Fleissiger Benutzer

    kannst du mir sagen wie ich das prüfen kann ?


    danke
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden