Ushbu qo'llanma sizga ALTER TABLE
iborasi yordamida ustunning ma'lumotlar turini qanday o'zgartirishni bosqichma-bosqich ko'rsatib beradi.
Ustunning ma'lumotlar turini o'zgartirish uchun siz ALTER TABLE
iborasidan quyidagi tarzda foydalanasiz:
ALTER TABLE table_name
ALTER COLUMN column_name [SET DATA] TYPE new_data_type;
Keling, bayonotni batafsil ko'rib chiqaylik:
- Birinchidan,
ALTER TABLE
kalit so'zlaridan keyin ustunni o'zgartirmoqchi bo'lgan jadval nomini belgilang. - Ikkinchidan,
ALTER COLUMN
bandidan keyin ma'lumotlar turini o'zgartirmoqchi bo'lgan ustun nomini belgilang. - Uchinchidan,
TYPE
kalit so'zidan keyin ustun uchun yangi ma'lumotlar turini kiriting.SET DATA TYPE
vaTYPE
ekvivalentdir.
Bitta bayonotda bir nechta ustunlarning ma'lumotlar turlarini o'zgartirish uchun siz bir nechta ALTER COLUMN
bandlaridan foydalanasiz:
ALTER TABLE table_name
ALTER COLUMN column_name1 [SET DATA] TYPE new_data_type,
ALTER COLUMN column_name2 [SET DATA] TYPE new_data_type,
...;
Ushbu sintaksisda siz har bir ALTER COLUMN
bandidan keyin vergul (,
) qo'shasiz.
PostgreSQL sizga quyidagi tarzda USING
bandini qo'shish orqali ma'lumotlar turini o'zgartirganda ustun qiymatlarini yangilariga aylantirish imkonini beradi:
ALTER TABLE table_name
ALTER COLUMN column_name TYPE new_data_type USING expression;
USING
bandi eski qiymatlarni yangilariga aylantirish imkonini beruvchi ifodani belgilaydi.
Agar siz USING
bandini o'tkazib yuborsangiz, PostgreSQL qiymatlarni bilvosita yangilariga o'tkazadi. Translatsiya muvaffaqiyatsiz bo'lsa, PostgreSQL xatolik chiqaradi va ma'lumotlarni konvertatsiya qilish uchun USING
bandini taqdim etishingizni tavsiya qiladi.
USING
kalit so'zidan keyingi ibora column_name::new_data_type
kabi oddiy bo'lishi mumkin, masalan, price::numeric
yoki maxsus funksiya kabi murakkab.
Keling, assets
deb nomlangan yangi jadval yaratamiz va namoyish qilish uchun jadvalga bir nechta qatorlarni kiritamiz.
CREATE TABLE assets (
id serial PRIMARY KEY,
name TEXT NOT NULL,
asset_no VARCHAR NOT NULL,
description TEXT,
location TEXT,
acquired_date DATE NOT NULL
);
INSERT INTO assets(name,asset_no,location,acquired_date)
VALUES('Server','10001','Server room','2017-01-01'),
('UPS','10002','Server room','2017-01-01');
name
ustunining ma'lumotlar turini VARCHAR
ga o'zgartirish uchun siz quyidagi bayonotdan foydalanasiz:
ALTER TABLE assets
ALTER COLUMN name TYPE VARCHAR;
Quyidagi bayonot description
va location
ustunlarining ma'lumotlar turlarini TEXT
dan VARCHAR
ga o'zgartiradi:
ALTER TABLE assets
ALTER COLUMN location TYPE VARCHAR,
ALTER COLUMN description TYPE VARCHAR;
asset_no
ustunining ma'lumotlar turini butun songa o'zgartirish uchun siz quyidagi bayonotdan foydalanasiz:
ALTER TABLE assets
ALTER COLUMN asset_no TYPE INT;
PostgreSQL xato va juda foydali maslahat berdi:
ERROR: column "asset_no" cannot be cast automatically to type integer
HINT: You might need to specify "USING asset_no::integer".
Quyidagi bayonot yuqoridagi bayonotga USING
bandini qo'shadi:
ALTER TABLE assets
ALTER COLUMN asset_no TYPE INT
USING asset_no::integer;
Kutilganidek ishladi.
Ushbu qo'llanmada siz ustun turini o'zgartirish uchun ALTER TABLE ALTER COLUMN
bayonotidan qanday foydalanishni o'rgandingiz.