sql: บันทึกการแปลงตาราง

ความรู้ sql น้อยมาก ขออนุญาตบันทึกเอาไว้ดูครับ

ต้องการแปลงโครงสร้างตารางคือ
สมมุติว่ามีตาราง phone มีโครงสร้างดังนี้

CREATE TABLE phone 
(   phoneid	SERIAL,
    custid      VARCHAR(10),
    name        VARCHAR(128),
    phone       VARCHAR(64),
    cat         VARCHAR(64),
    rem         TEXT
);

เมื่อใส่ข้อมูลแล้ว ต้องการเปลี่ยนสดมถ์ custid เป็นข้อมูลชนิด integer
พบว่าไม่สามารถเปลี่ยนตรง ๆ โดยใช้คำสั่ง ALTER ได้

แปลงโดยใช้ตาราง temp เป็นตัวทด
ใช้เงื่อนไข CASE บวกฟังก์ชั่น CAST ในการแปลง

CREATE TABLE temp AS 
SELECT phoneid, 
  CASE WHEN custid='' THEN 0 ELSE CAST(custid AS INT) END AS custid,
  name,
  phone,
  cat
FROM phone;

แล้วจึงเอาตารางใหม่ไปทับตารางเก่า

DROP TABLE phone;
SELECT * INTO phone FROM temp;
DROP TABLE temp;

หรือ

DROP TABLE phone;
ALTER TABLE temp RENAME TO phone;

ทดลองกับเดเบียน etch, postgresql-8.1, phppgadmin-4.0.1

Topic: