Kuidas muuta PostgreSQLis veeru andmetüüpi?

Postitas Erki Eessaar 28.11.2024 11:50 (muudeti 28.11.2024 12:10)
Oletame, et meil on andmebaas kontseptuaalse struktuuriga:

[Auto_seisundi_liik]-1-------------0..*-[Auto]

Tabelis Auto ja Auto_seisundi_liik on veerg auto_seisundi_liik_kood tüüpi INTEGER, kuid peaks olema SMALLINT, sest erinevaid auto seisundeid on ainult neli tükki. (auto_seisundi_liik) on tabelis Auto_seisundi_liik primaarvõti ning tabelis Auto välisvõti. Neid kitsendusi pole vaja muudatuse tegemiseks kustutada. Küll aga on vaja eelnevalt kustutada veergudest sõltuvad vaated ning SQL standardi kehandiga SQL funktsioonid. Kui Teil on nende objektide loomise laused olemas, saate kustutamist psqlis automatiseerida gexec käsu abil:

--Skeemis public olevate rutiinide kustutamine
SELECT format('DROP ROUTINE %1$I.%2$I CASCADE;', routine_schema, routine_name) AS statements
FROM INFORMATION_SCHEMA.routines
WHERE routine_schema='public'
\gexec

--Skeemis public olevate vaadete kustutamine
SELECT format('DROP VIEW %1$I.%2$I CASCADE;', table_schema, table_name) AS statements
FROM INFORMATION_SCHEMA.tables
WHERE table_type='VIEW'
AND table_schema='public'
\gexec

Veeru tüübi muutmine:

ALTER TABLE Auto_seisundi_liik ALTER COLUMN auto_seisundi_liik_kood SET DATA TYPE SMALLINT;
 
ALTER TABLE Auto ALTER COLUMN auto_seisundi_liik_kood SET DATA TYPE SMALLINT;

Peale seda tuleb vaated ja rutiinid uuesti luua.
 

Hinda postitust:

Keskmine hinne : Pole veel hinnanguid!