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

mickyturbo

Fleissiger Benutzer
Beiträge
54
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
 
Werbung:
=# \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:
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.
 
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.
 
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.

Ok, den view zu löschen bekomm ich hin.
Danke & Gebe feedback
 
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.
 
noch einige Tipp:
  • 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
    stimmt , hatte ich übersehen im view

  • in software_licenses scheint ein Index auf sw und und auch auf equipmentnr zu fehlen
    soll ich noch mehrere Tabellen posten ??

  • Text-Datentypen mit fester Länge sind praktisch, wenn da feste Constraints existieren, die du durchsetzen willst. Aber eher unpraktisch bei Feldern wie comment.
    stimmt, total nervig in diesem Fall.

danke nochmal
 
Werbung:
Zurück
Oben