Küsimus

Anonüümne (28.11.2024 11:37)
Kuidas muuta PostgreSQLis veeru andmetüüpi?

Vastus (12.09.2026 14:44): 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.
 


Keskmine hinne: Pole veel hinnanguid!