มีวิธีคัดลอกโครงสร้างของตารางไปยังตารางใหม่โดยไม่มีข้อมูลรวมถึงคีย์และข้อ จำกัด ทั้งหมดหรือไม่
มีวิธีคัดลอกโครงสร้างของตารางไปยังตารางใหม่โดยไม่มีข้อมูลรวมถึงคีย์และข้อ จำกัด ทั้งหมดหรือไม่
คำตอบ:
สำหรับสำเนาสคีมาอย่างง่ายให้ใช้ประโยค like
CREATE TABLE new_table_name ( like old_table_name including all)
CREATE TABLE new (like old, extra_column text);
สิ่งที่ใกล้เคียงที่สุดที่คุณจะได้รับจาก SQL คือ:
create table new (
like old
including defaults
including constraints
including indexes
);
แต่จะไม่คัดลอกทุกอย่าง สิ่งที่สำคัญที่สุดที่ขาดหายไปคือคีย์ต่างประเทศ นอกจากนี้ - ทริกเกอร์จะไม่ถูกคัดลอกด้วย ไม่แน่ใจเรื่องอื่น ๆ
อีกวิธีหนึ่งคือการถ่ายโอนข้อมูลโครงสร้างตารางเปลี่ยนชื่อในการถ่ายโอนข้อมูลและโหลดอีกครั้ง:
pg_dump -s -t old databases | sed 's/old/new/g' | psql
แต่ระวังว่า sed ที่เรียบง่ายดังกล่าวจะเปลี่ยนเก่าเป็นใหม่ในที่อื่นด้วย (เช่นถ้าคุณมีคอลัมน์ในตารางชื่อ "is_scolded" มันจะกลายเป็น "is_scnewed")
คำถามนั้นค่อนข้างจริง: ทำไมคุณถึงต้องการ - เพราะเพื่อจุดประสงค์ต่างๆฉันจะใช้เทคนิคที่แตกต่างกัน
including constraints
ไม่ได้กับ PostgreSQL 8.3
ในการคัดลอกตารางอย่างสมบูรณ์สามารถใช้รูปแบบสั้น ๆ โดยใช้คำสั่ง TABLE ได้:
CREATE TABLE films2 AS
TABLE films
WITH NO DATA;
รายละเอียดเพิ่มเติมที่นี่
ลองดูที่pgAdminเป็นวิธีที่ง่ายที่สุดในการทำสิ่งที่คุณต้องการ
คลิกขวาที่ตารางสคริปต์ - สร้าง
เกี่ยวกับ
CREATE TABLE sample_table_copy AS (SELECT * FROM sample_table WHERE 1 = 2)