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

Cách tạo chuỗi nếu không tồn tại

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:

  1. Tên không tồn tại. -> Tạo trình tự.
  2. 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?
  3. 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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. chuỗi byte không hợp lệ để mã hóa UTF8

  2. Kết nối với Postgresql trong một thùng chứa docker từ bên ngoài

  3. Hệ thống tệp Linux và điểm chuẩn điểm kiểm tra PostgreSQL

  4. Làm thế nào để truy cập chỉ mục nội bộ mảng với postgreSQL?

  5. Postgres CHỌN nơi ĐÂU là UUID hoặc chuỗi