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 statementsFROM INFORMATION_SCHEMA.routinesWHERE routine_schema='public'\gexec--Skeemis public olevate vaadete kustutamine
SELECT format('DROP VIEW %1$I.%2$I CASCADE;', table_schema, table_name) AS statementsFROM INFORMATION_SCHEMA.tablesWHERE table_type='VIEW'AND table_schema='public'\gexecVeeru 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.