Có cách nào để sao chép cấu trúc của một bảng vào một bảng mới, không có dữ liệu, bao gồm tất cả các khóa và ràng buộc không?
Câu trả lời:
Đối với một bản sao giản đồ đơn giản, hãy sử dụng mệnh đề like.
CREATE TABLE new_table_name ( like old_table_name including all)
Chà, cách gần nhất bạn có thể nhận được với SQL là:
create table new (
like old
including defaults
including constraints
including indexes
);
Nhưng nó sẽ không sao chép mọi thứ. Những thứ quan trọng nhất bị thiếu là CHÌA KHÓA NGOẠI TỆ. Ngoài ra - các trình kích hoạt cũng không được sao chép. Không chắc về những thứ khác.
Một cách khác là kết xuất cấu trúc bảng, thay đổi tên của nó trong kết xuất và tải lại:
pg_dump -s -t old databases | sed 's/old/new/g' | psql
Nhưng hãy cẩn thận, rằng sed đơn giản như vậy cũng sẽ thay đổi cũ thành mới ở những nơi khác (ví dụ: nếu bạn có trong cột bảng của mình có tên "is_scolded", nó sẽ trở thành "is_scnewed").
Câu hỏi thực sự là: tại sao bạn cần nó - bởi vì cho các mục đích khác nhau, tôi sẽ sử dụng các kỹ thuật khác nhau.
including constraints
không hoạt động trên PostgreSQL 8.3
Để sao chép hoàn toàn một bảng, bạn cũng có thể sử dụng biểu mẫu rút gọn bằng lệnh TABLE:
CREATE TABLE films2 AS
TABLE films
WITH NO DATA;
Thêm chi tiết tại đây
Hãy xem pgAdmin - cho đến nay là cách dễ nhất để làm những gì bạn muốn.
Nhấp chuột phải vào bảng, Tập lệnh - Tạo.
Làm thế nào về
CREATE TABLE sample_table_copy AS (SELECT * FROM sample_table WHERE 1 = 2)
CREATE TABLE new (like old, extra_column text);