Postgres 9.5 trở lên
IF NOT EXISTS
đã được thêm vào CREATE SEQUENCE
trong Postgres 9.5. Đó là giải pháp đơn giản bây giờ:
CREATE SEQUENCE IF NOT EXISTS myschema.myseq;
Nhưng dù sao hãy xem xét chi tiết của câu trả lời đã lỗi thời ...
Và bạn biết về serial
hoặc IDENTITY
cột, phải không?
- Cột bảng tăng dần tự động
Postgres 9.4 trở lên
Các chuỗi chia sẻ không gian tên với một số đối tượng giống bảng khác. Hướng dẫn sử dụng:
Tên trình tự phải khác biệt với tên của bất kỳ trình tự, bảng, chỉ mục, chế độ xem hoặc bảng ngoại nào khác trong cùng một lược đồ.
Tôi nhấn mạnh đậm. Vì vậy, có ba trường hợp:
- Tên không tồn tại. -> Tạo trình tự.
- Tồn tại dãy có cùng tên. -> Không làm gì? Bất kỳ đầu ra? Có ghi nhật ký không?
- Tồn tại đối tượng xung đột khác có cùng tên. -> Làm gì đó? Bất kỳ đầu ra? Có ghi nhật ký không?
Chỉ định những việc cần làm trong cả hai trường hợp. A DO
câu lệnh có thể trông giống như sau:
DO
$do$
DECLARE
_kind "char";
BEGIN
SELECT relkind
FROM pg_class
WHERE oid = 'myschema.myseq'::regclass -- sequence name, optionally schema-qualified
INTO _kind;
IF NOT FOUND THEN -- name is free
CREATE SEQUENCE myschema.myseq;
ELSIF _kind = 'S' THEN -- sequence exists
-- do nothing?
ELSE -- object name exists for different kind
-- do something!
END IF;
END
$do$;
Các loại đối tượng (relkind
) trong pg_class
theo sách hướng dẫn:
r =bảng thông thường
i =chỉ số
S =dãy
v =chế độ xem
m =chế độ xem cụ thể hóa
c =loại tổng hợp
t =bảng TOAST
f =bảng ngoại
Có liên quan:
- Cách kiểm tra xem một bảng có tồn tại trong một lược đồ nhất định không