PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cách tạo bảng Chỉ khi nó không tồn tại trong PostgreSQL

Trong PostgreSQL, bạn có thể sử dụng IF NOT EXISTS mệnh đề của CREATE TABLE để kiểm tra xem một bảng cùng tên đã tồn tại trong cơ sở dữ liệu hay chưa trước khi tạo nó.

Bảng sẽ chỉ được tạo nếu không có bảng nào khác tồn tại cùng tên. Nếu một bảng đã tồn tại với tên đó, thì một "thông báo" sẽ được đưa ra thay vì một lỗi.

Ví dụ

Dưới đây là một ví dụ để chứng minh:

CREATE TABLE IF NOT EXISTS t1 (
  c1 INT,
  c2 VARCHAR(10)
);

Đây, t1 là tên bảng và mọi thứ nằm giữa dấu ngoặc đơn là định nghĩa bảng (tức là cột, v.v.).

Trong trường hợp đó, bảng sẽ chỉ được tạo nếu chưa có một bảng nào được gọi là t1 .

Kiểm tra để đảm bảo rằng Bảng Hiện đã Tồn tại

Chúng tôi có thể truy vấn pg_tables xem để kiểm tra xem bảng hiện đã tồn tại chưa:

SELECT EXISTS (
    SELECT FROM 
        pg_tables
    WHERE 
        schemaname = 'public' AND 
        tablename  = 't1'
    );

Kết quả:

True

Trong trường hợp này, tôi nhận được True , có nghĩa là bảng tồn tại và tôi có quyền truy cập vào nó.

Tùy thuộc vào cấu hình của bạn, bạn có thể nhận được t / f thay vì True / False .

Cố gắng tạo lại bảng

Nếu chúng tôi cố gắng tạo lại bảng đó:

CREATE TABLE IF NOT EXISTS t1 (
  c1 INT,
  c2 VARCHAR(10)
);

Chúng tôi không gặp lỗi, chúng tôi nhận được thông báo:

NOTICE:  relation "t1" already exists, skipping

Như mong đợi, thông báo cho chúng ta biết rằng bảng đã tồn tại.

Không có IF NOT EXISTS Mệnh đề

Dưới đây là những gì sẽ xảy ra khi chúng tôi không sử dụng IF NOT EXISTS khi cố gắng tạo một bảng đã tồn tại:

CREATE TABLE t1 (
  c1 INT,
  c2 VARCHAR(10)
);

Lần này chúng tôi gặp lỗi:

ERROR:  relation "t1" already exists

Lưu ý rằng IF NOT EXISTS mệnh đề không kiểm tra cấu trúc / định nghĩa bảng. Nó chỉ đơn giản là kiểm tra xem không có bảng nào có cùng tên mà chúng tôi đang cố gắng cung cấp cho bảng mà chúng tôi đang tạo.

Nói cách khác, chỉ vì một bảng có tên đó đã tồn tại, điều đó không có nghĩa là bảng đó có định nghĩa chính xác.

IF NOT EXISTS chức năng đã được thêm vào PostgreSQL 9.1 (ghi chú phát hành).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. NULL so với `vô cực` trong các loại phạm vi PostgreSQL

  2. PostgreSQL CHẨN ĐOÁN BẬT với các ĐẶT HÀNG KHÁC BỞI

  3. Sử dụng COALESCE để xử lý các giá trị NULL trong PostgreSQL

  4. Thêm khoảng thời gian vào dấu thời gian bằng cách sử dụng Phân đoạn Ecto

  5. Truy vấn đệ quy Postgres với row_to_json