PostgreSQL แก้ไขตาราง: เพิ่มและเปลี่ยนชื่อคอลัมน์

⚡ สรุปอย่างชาญฉลาด

PostgreSQL คำสั่ง ALTER TABLE เปลี่ยนแปลงโครงสร้างของตารางที่มีอยู่แล้ว ทำให้คุณสามารถเพิ่มหรือลบคอลัมน์ เปลี่ยนชื่อคอลัมน์หรือทั้งตาราง กำหนดค่าเริ่มต้น และแนบข้อจำกัดการตรวจสอบได้โดยไม่ต้องสร้างอ็อบเจ็กต์ใหม่

  • 🧱 ไวยากรณ์: คำสั่ง ALTER TABLE table-name จะทำการเปลี่ยนแปลงโครงสร้างหนึ่งครั้งต่อคำสั่ง
  • เพิ่มคอลัมน์: คำสั่ง ADD column-name data-type จะเพิ่มคอลัมน์ใหม่ลงในตาราง
  • ✏️ เปลี่ยนชื่อ: เปลี่ยนชื่อคอลัมน์หรือชื่อตารางโดยใช้คำสั่ง RENAME COLUMN และ RENAME TO
  • ⚙️ ค่าเริ่มต้น: คำสั่ง ALTER COLUMN SET DEFAULT จะกำหนดค่าเริ่มต้นให้กับแถวที่จะแทรกในอนาคต
  • 🛡️ ตรวจสอบข้อจำกัด: คำสั่ง ADD CHECK จะตรวจสอบความถูกต้องของข้อมูลใหม่และปฏิเสธค่าที่ไม่ตรงตามกฎ
  • 🤖 การย้ายระบบ AI: ผู้ช่วย AI จะร่างสคริปต์ ALTER TABLE และตรวจสอบความถูกต้องเพื่อให้มั่นใจว่าสามารถใช้งานได้อย่างปลอดภัย

PostgreSQL แก้ไขตาราง

ALTER TABLE คืออะไรใน PostgreSQL?

การขอ แก้ไขตาราง คำสั่งนี้ใช้เพื่อเปลี่ยนแปลงโครงสร้างของ PostgreSQL คำสั่ง `table` ใช้สำหรับเปลี่ยนคอลัมน์ของตารางหรือเปลี่ยนชื่อตารางโดยไม่ต้องลบออกping และสร้างวัตถุขึ้นมาใหม่

วากยสัมพันธ์

นี่คือไวยากรณ์สำหรับ PostgreSQL คำสั่งแก้ไขตาราง:

ALTER TABLE table-name action;

พารามิเตอร์ table-name คือชื่อของตารางที่คุณต้องการเปลี่ยนแปลง พารามิเตอร์ action คือการกระทำที่คุณต้องการดำเนินการ เช่น การเปลี่ยนชื่อคอลัมน์ หรือการเปลี่ยนชนิดข้อมูลของคอลัมน์

Descriptไอออน

คำสั่ง ALTER TABLE จะเปลี่ยนคำจำกัดความของตารางที่มีอยู่ โดยจะมีฟอร์มย่อยดังต่อไปนี้:

  • เพิ่มคอลัมน์: คำสั่งนี้ใช้ไวยากรณ์คล้ายกับคำสั่ง CREATE TABLE เพื่อเพิ่มคอลัมน์ใหม่ลงในตาราง
  • วางคอลัมน์: สำหรับการลดping คอลัมน์ในตาราง ข้อจำกัดและดัชนีที่กำหนดไว้ในคอลัมน์เหล่านั้นก็จะถูกลบออกด้วย
  • ตั้งค่า/วางค่าเริ่มต้น: ใช้สำหรับกำหนดหรือลบค่าเริ่มต้นของคอลัมน์ การเปลี่ยนแปลงจะมีผลเฉพาะกับคอลัมน์ถัดไปเท่านั้น คำสั่ง INSERT.
  • SET/DROP ไม่เป็นโมฆะ: เปลี่ยนแปลงว่าคอลัมน์นั้นจะอนุญาตให้มีค่าว่างหรือไม่
  • สถิติชุด: สำหรับตั้งค่าเป้าหมายการรวบรวมสถิติสำหรับแต่ละคอลัมน์ในการดำเนินการวิเคราะห์ (ANALYZE)
  • ตั้งค่าการจัดเก็บ: สำหรับกำหนดโหมดการจัดเก็บข้อมูลสำหรับคอลัมน์ ไม่ว่าจะเป็นแบบแทรกในเนื้อหาหรือในตารางเสริม
  • ตั้งค่าโดยไม่มี OIDS: ใช้สำหรับลบคอลัมน์ OID เก่าออกจากตาราง
  • เปลี่ยนชื่อ: สำหรับการเปลี่ยนชื่อตารางหรือชื่อคอลัมน์
  • เพิ่ม table_constraint: ใช้สำหรับเพิ่มข้อจำกัดใหม่ให้กับตาราง โดยใช้ไวยากรณ์เดียวกันกับ สร้างตาราง คำสั่ง
  • วางข้อ จำกัด: ใช้สำหรับหยดน้ำping ข้อจำกัดของตาราง
  • OWNER: สำหรับการเปลี่ยนเจ้าของตาราง ลำดับ ดัชนี หรือมุมมอง ให้เป็นผู้ใช้ที่กำหนด
  • กลุ่ม: สำหรับทำเครื่องหมายตารางที่จะใช้สำหรับการดำเนินการคลัสเตอร์ในอนาคต

การแก้ไขคอลัมน์

สามารถแก้ไขคอลัมน์ได้หลายวิธี การแก้ไขดังกล่าวทำได้โดยใช้คำสั่ง ALTER TABLE เราจะมาอธิบายรายละเอียดกันด้านล่าง

การเพิ่มคอลัมน์ใหม่

หากต้องการเพิ่มคอลัมน์ใหม่ให้กับ PostgreSQL ตาราง คำสั่ง ALTER TABLE ใช้รูปแบบต่อไปนี้:

ALTER TABLE table-name
  ADD new-column-name column-definition;

table-name คือชื่อของตารางที่จะถูกแก้ไข new-column-name คือชื่อของคอลัมน์ใหม่ที่จะเพิ่ม column-definition คือ... ประเภทข้อมูล ของคอลัมน์ใหม่ ดูตารางหนังสือที่แสดงด้านล่าง:

PostgreSQL ตัวอย่างคำสั่ง ALTER TABLE

ตารางนี้มีสองคอลัมน์ คือ id และ name เราต้องการเพิ่มคอลัมน์ใหม่ลงในตารางและตั้งชื่อว่า author โดยใช้คำสั่งต่อไปนี้:

ALTER TABLE Book
  ADD author VARCHAR(50);

หลังจากรันคำสั่งข้างต้นแล้ว ตาราง Book จะเป็นดังนี้:

PostgreSQL ตัวอย่างคำสั่ง ALTER TABLE

เพิ่มคอลัมน์ใหม่สำเร็จแล้ว

การเปลี่ยนชื่อคอลัมน์ของตาราง

เราสามารถใช้คำสั่ง ALTER TABLE เพื่อเปลี่ยนชื่อคอลัมน์ได้ ในกรณีนี้ คำสั่งนี้จะใช้รูปแบบต่อไปนี้:

ALTER TABLE table-name
  RENAME COLUMN old-name TO new-name;

table-name คือชื่อของตารางที่ต้องการเปลี่ยนชื่อคอลัมน์ old-name คือชื่อปัจจุบันของคอลัมน์ และ new-name คือชื่อใหม่ของคอลัมน์ พิจารณาตาราง Book ที่แสดงด้านล่างนี้:

หนังสือ:

PostgreSQL ตัวอย่างคำสั่ง ALTER TABLE

เราต้องเปลี่ยนชื่อคอลัมน์ author เป็น book_author โดยใช้คำสั่งดังนี้:

ALTER TABLE Book
  RENAME COLUMN author TO book_author;

หลังจากรันคำสั่งแล้ว เราจะสามารถดูโครงสร้างของตารางได้:

PostgreSQL ตัวอย่างคำสั่ง ALTER TABLE

เปลี่ยนชื่อคอลัมน์เรียบร้อยแล้ว

การตั้งค่าเริ่มต้นสำหรับคอลัมน์

เราสามารถกำหนดค่าเริ่มต้นให้กับคอลัมน์ได้ เพื่อให้แม้ว่าคุณจะไม่ได้ระบุค่าสำหรับคอลัมน์นั้นในระหว่างการดำเนินการ INSERT ค่าเริ่มต้นก็จะถูกนำมาใช้ ในกรณีนี้ สามารถใช้คำสั่ง ALTER TABLE ด้วยไวยากรณ์ดังต่อไปนี้:

ALTER TABLE table-name ALTER COLUMN column-name [SET DEFAULT value];

table-name คือชื่อของตารางที่ต้องการแก้ไขคอลัมน์ column-name คือชื่อของคอลัมน์ที่ต้องการกำหนดค่าเริ่มต้น และ value คือค่าเริ่มต้นของคอลัมน์นั้น พิจารณาตาราง Book ที่แสดงด้านล่างนี้:

PostgreSQL ตัวอย่างคำสั่ง ALTER TABLE

เราจำเป็นต้องตั้งค่าเริ่มต้นสำหรับคอลัมน์ book_author เราสามารถรันคำสั่งต่อไปนี้:

ALTER TABLE Book ALTER COLUMN book_author SET DEFAULT 'Nicholas Samuel';

ตอนนี้ให้เราแทรกแถวลงในตาราง:

INSERT INTO Book (id, name)
 VALUES (6, 'PostgreSQL for Beginners');

โปรดทราบว่าเราได้ใส่ค่าลงในคอลัมน์เพียงสองคอลัมน์ คือ id และ name เท่านั้น อย่างไรก็ตาม ค่าเริ่มต้นได้ถูกนำมาใช้สำหรับคอลัมน์ book_author:

PostgreSQL ตัวอย่างคำสั่ง ALTER TABLE

การเพิ่มข้อจำกัดในการตรวจสอบ

ข้อจำกัดในการตรวจสอบช่วยในการตรวจสอบความถูกต้องของเรกคอร์ดที่ถูกแทรกลงในตาราง เราสามารถทำได้โดยการรวมคำสั่ง ALTER TABLE เข้ากับคำสั่ง ADD CHECK ไวยากรณ์:

ALTER TABLE table-name ADD CHECK expression;

table-name คือชื่อของตารางที่จะทำการแก้ไข และ expression คือข้อจำกัดที่จะกำหนดให้กับคอลัมน์ของตาราง ตัวอย่างเช่น เราจะแก้ไขคอลัมน์ book_author ของตาราง Book ให้ยอมรับเฉพาะค่า Nicholas และ Samuel เท่านั้น:

ALTER TABLE Book ADD CHECK (book_author IN ('Nicholas', 'Samuel'));

ตอนนี้ ให้เราลองแทรกค่าอื่นที่ไม่ใช่ Nicholas หรือ Samuel ลงในคอลัมน์ book_author ของตาราง Book:

INSERT INTO Book
VALUES(7, 'Best PostgreSQL Book', 'Gregory Bush');

คำสั่งจะส่งกลับข้อผิดพลาดต่อไปนี้:

PostgreSQL ตัวอย่างคำสั่ง ALTER TABLE

การดำเนินการแทรกล้มเหลวเนื่องจากเราละเมิดข้อจำกัดการตรวจสอบ

การเปลี่ยนชื่อตาราง

ต่อไปนี้เป็นไวยากรณ์สำหรับคำสั่ง ALTER TABLE สำหรับการเปลี่ยนชื่อตาราง:

ALTER TABLE table-name
  RENAME TO new-table-name;

table-name คือชื่อปัจจุบันของตาราง และ new-table-name คือชื่อใหม่ที่จะกำหนดให้กับตาราง ตัวอย่างเช่น เราจะเปลี่ยนชื่อตาราง Book เป็น Books:

ALTER TABLE Book
  RENAME TO Books;

การใช้งาน pgAdmin

ที่ผ่านมาเราได้รันคำสั่งต่างๆ ผ่านทาง SQL shell แล้ว ต่อไปเราจะมาดูวิธีการดำเนินการเหล่านี้แบบเห็นภาพโดยใช้ pgAdmin กัน

การเพิ่มคอลัมน์ใหม่

ขั้นตอน 1) เข้าสู่ระบบบัญชี pgAdmin ของคุณ

ขั้นตอน 2)

  1. จากแถบนำทางด้านซ้าย คลิกฐานข้อมูล
  2. คลิกสาธิต

PostgreSQL ตัวอย่างคำสั่ง ALTER TABLE

ขั้นตอน 3) พิมพ์แบบสอบถามในตัวแก้ไขแบบสอบถาม:

ALTER TABLE Book
  ADD author VARCHAR(50);

ขั้นตอน 4) คลิกปุ่มดำเนินการ

PostgreSQL ตัวอย่างคำสั่ง ALTER TABLE

ขั้นตอน 5) ในการตรวจสอบว่ามีการเพิ่มคอลัมน์หรือไม่ ให้ทำดังต่อไปนี้:

  1. คลิกฐานข้อมูลจากการนำทางด้านซ้าย
  2. ขยายการสาธิต
  3. ขยายสคีมา
  4. ขยายสาธารณะ
  5. ขยายตาราง
  6. ขยายหนังสือ.
  7. ขยายคอลัมน์

PostgreSQL ตัวอย่างคำสั่ง ALTER TABLE

ควรเพิ่มคอลัมน์ดังที่แสดงด้านล่าง:

PostgreSQL ตัวอย่างคำสั่ง ALTER TABLE

การเปลี่ยนชื่อคอลัมน์ของตาราง

ขั้นตอน 1) เข้าสู่ระบบบัญชี pgAdmin ของคุณ

ขั้นตอน 2)

  1. จากแถบนำทางด้านซ้าย คลิกฐานข้อมูล
  2. คลิกสาธิต

PostgreSQL ตัวอย่างคำสั่ง ALTER TABLE

ขั้นตอน 3) พิมพ์แบบสอบถามในตัวแก้ไขแบบสอบถาม:

ALTER TABLE Book
  RENAME COLUMN author TO book_author;

ขั้นตอน 4) คลิกปุ่มดำเนินการ

PostgreSQL ตัวอย่างคำสั่ง ALTER TABLE

ขั้นตอน 5) เพื่อตรวจสอบว่าการเปลี่ยนแปลงสำเร็จหรือไม่ ให้ขยายคอลัมน์ตารางหนังสือเหมือนเดิม:

PostgreSQL ตัวอย่างคำสั่ง ALTER TABLE

ตอนนี้คอลัมน์ควรเป็นดังนี้:

PostgreSQL ตัวอย่างคำสั่ง ALTER TABLE

เปลี่ยนคอลัมน์เรียบร้อยแล้ว

การตั้งค่าเริ่มต้นสำหรับคอลัมน์

ขั้นตอน 1) เข้าสู่ระบบบัญชี pgAdmin ของคุณ

ขั้นตอน 2)

  1. จากแถบนำทางด้านซ้าย คลิกฐานข้อมูล
  2. คลิกสาธิต

PostgreSQL ตัวอย่างคำสั่ง ALTER TABLE

ขั้นตอน 3) พิมพ์แบบสอบถามในตัวแก้ไขแบบสอบถาม:

ALTER TABLE Book ALTER COLUMN book_author SET DEFAULT 'Nicholas Samuel';

ขั้นตอน 4) คลิกปุ่มดำเนินการ

PostgreSQL ตัวอย่างคำสั่ง ALTER TABLE

ขั้นตอน 5) เพื่อทดสอบ ให้รันคำสั่งต่อไปนี้ในตัวแก้ไขแบบสอบถาม:

INSERT INTO Book (id, name)
 VALUES (6, 'PostgreSQL for Beginners')

ขั้นตอน 6) ตอนนี้เราสามารถสอบถามตารางเพื่อตรวจสอบว่าค่าเริ่มต้นถูกแทรกลงในคอลัมน์ book_author หรือไม่:

PostgreSQL ตัวอย่างคำสั่ง ALTER TABLE

การเพิ่มข้อจำกัดในการตรวจสอบ

ขั้นตอน 1) เข้าสู่ระบบบัญชี pgAdmin ของคุณ

ขั้นตอน 2)

  1. จากแถบนำทางด้านซ้าย คลิกฐานข้อมูล
  2. คลิกสาธิต

PostgreSQL ตัวอย่างคำสั่ง ALTER TABLE

ขั้นตอน 3) พิมพ์แบบสอบถามในตัวแก้ไขแบบสอบถาม:

ALTER TABLE Book ADD CHECK (book_author IN ('Nicholas', 'Samuel'))

ขั้นตอน 4) คลิกปุ่มดำเนินการ

PostgreSQL ตัวอย่างคำสั่ง ALTER TABLE

ขั้นตอน 5) เพื่อทดสอบ ให้พิมพ์คำสั่งต่อไปนี้ลงในตัวแก้ไขคำสั่ง และคลิกปุ่ม Execute:

INSERT INTO Book
VALUES(7, 'Best PostgreSQL Book', 'Gregory Bush');

PostgreSQL ตัวอย่างคำสั่ง ALTER TABLE

มันจะกลับมาสิ่งต่อไปนี้:

PostgreSQL ตัวอย่างคำสั่ง ALTER TABLE

การเปลี่ยนชื่อตาราง

ขั้นตอน 1) เข้าสู่ระบบบัญชี pgAdmin ของคุณ

ขั้นตอน 2)

  1. จากแถบนำทางด้านซ้าย คลิกฐานข้อมูล
  2. คลิกสาธิต

PostgreSQL ตัวอย่างคำสั่ง ALTER TABLE

ขั้นตอน 3) พิมพ์แบบสอบถามในตัวแก้ไขแบบสอบถาม:

ALTER TABLE Book
  RENAME TO Books;

ขั้นตอน 4) คลิกปุ่มดำเนินการ

PostgreSQL ตัวอย่างคำสั่ง ALTER TABLE

ขั้นตอน 5) หากต้องการตรวจสอบว่าตารางถูกเปลี่ยนชื่อหรือไม่ ให้ขยายไปที่ ฐานข้อมูล > สาธิต > โครงสร้างข้อมูล > สาธารณะ > ตาราง:

PostgreSQL ตัวอย่างคำสั่ง ALTER TABLE

เปลี่ยนชื่อตารางสำเร็จแล้ว

ดาวน์โหลดฐานข้อมูลที่ใช้ในบทช่วยสอนนี้

คำถามที่พบบ่อย

ใช้คำสั่ง ALTER TABLE table_name ALTER COLUMN column_name TYPE new_type และเพิ่มส่วน USING เมื่อต้องการแปลงค่า เช่น ALTER COLUMN price TYPE numeric USING price::numeric PostgreSQL ทำการเขียนข้อมูลในคอลัมน์ใหม่และตรวจสอบว่าข้อมูลที่มีอยู่ตรงกับประเภทข้อมูลใหม่หรือไม่

เฉพาะในกรณีที่ค่าเริ่มต้นไม่คงที่เท่านั้น เนื่องจาก PostgreSQL 11. การเพิ่มคอลัมน์ด้วยค่าเริ่มต้นคงที่ จะอัปเดตแคตตาล็อกทันทีโดยไม่ต้องเขียนทับแถว ค่าเริ่มต้นที่เรียกใช้ฟังก์ชันจะยังคงบังคับให้เขียนทับตารางทั้งหมดและใช้การล็อกที่เข้มงวดกว่า

ลำดับ PostgreSQL ไม่สามารถแก้ไขข้อจำกัดที่มีอยู่ได้ ให้ลบข้อจำกัดเดิมด้วยคำสั่ง DROP CONSTRAINT จากนั้นเพิ่มข้อจำกัดที่แก้ไขแล้วด้วยคำสั่ง ADD CONSTRAINT ควรทำธุรกรรมครอบคำสั่งทั้งสองไว้ด้วยกัน เพื่อให้ตารางนั้นมีกฎอยู่เสมอ

ระบุคำสั่งหลายคำสั่งโดยคั่นด้วยเครื่องหมายจุลภาค: ALTER TABLE Book ADD COLUMN price int, ADD COLUMN isbn text. PostgreSQL ทำการเปลี่ยนแปลงทุกอย่างในรอบเดียว ซึ่งเร็วกว่าและทำให้ตารางมีความสม่ำเสมอ

ใช้คำสั่ง ALTER TABLE table_name ADD PRIMARY KEY (column) หรือ ADD CONSTRAINT pk_name PRIMARY KEY (column) โดยคอลัมน์ต้องมีค่าที่ไม่ซ้ำกันและไม่ใช่ค่าว่าง PostgreSQL สร้างดัชนีเฉพาะที่ไม่ซ้ำกันโดยอัตโนมัติเมื่อสร้างคีย์

คำสั่ง RENAME จะทำการอัปเดตเฉพาะชื่อตารางในแคตตาล็อกระบบเท่านั้น แถว ดัชนี และข้อจำกัดที่จัดเก็บไว้จะยังคงอยู่และไม่ได้รับผลกระทบ มุมมองหรือฟังก์ชันที่อ้างอิงถึงชื่อเดิมอาจยังต้องได้รับการอัปเดตในภายหลัง

ผู้ช่วย AI จะร่างสคริปต์ ALTER TABLE จากการเปลี่ยนแปลงที่อธิบายไว้ จัดลำดับขั้นตอน ADD, RENAME และข้อจำกัดอย่างถูกต้อง และเพิ่มข้อความ USING สำหรับการแปลงประเภทข้อมูล นอกจากนี้ยังแจ้งเตือนการดำเนินการที่เขียนทับตารางขนาดใหญ่หรือมีการล็อกข้อมูลจำนวนมาก

ใช่แล้ว AI Copilot จะตรวจสอบการย้ายข้อมูล แจ้งเตือนเกี่ยวกับการล็อกหรือการเขียนทับตารางทั้งหมด แนะนำการสร้างดัชนีแบบกลุ่มหรือแบบพร้อมกัน และแนะนำวิธีการห่อหุ้มข้อมูลping การเปลี่ยนแปลงในธุรกรรม ทำให้การอัปเดตสคีมามีความปลอดภัยมากขึ้นในการนำไปใช้งาน

สรุปโพสต์นี้ด้วย: