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).