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

PostgreSQL tạo bảng nếu không tồn tại

Tính năng này đã được triển khai trong Postgres 9.1 :

CREATE TABLE IF NOT EXISTS myschema.mytable (i integer);

Đối với phiên bản cũ hơn , đây là một hàm để làm việc xung quanh nó:

CREATE OR REPLACE FUNCTION create_mytable()
  RETURNS void
  LANGUAGE plpgsql AS
$func$
BEGIN
   IF EXISTS (SELECT FROM pg_catalog.pg_tables 
              WHERE  schemaname = 'myschema'
              AND    tablename  = 'mytable') THEN
      RAISE NOTICE 'Table myschema.mytable already exists.';
   ELSE
      CREATE TABLE myschema.mytable (i integer);
   END IF;
END
$func$;

Gọi:

SELECT create_mytable();        -- call as many times as you want. 

Ghi chú:

  • Các cột schemanametablename trong pg_tables là trường hợp nhạy cảm. Nếu bạn trích dẫn kép số nhận dạng trong CREATE TABLE tuyên bố, bạn cần phải sử dụng cùng một chính tả. Nếu không, bạn cần sử dụng các chuỗi chữ thường. Xem:

  • Tên cột PostgreSQL có phân biệt chữ hoa chữ thường không?

  • pg_tables chỉ chứa bảng thực tế . Mã định danh vẫn có thể bị chiếm bởi các đối tượng liên quan. Xem:

  • Cách kiểm tra xem một bảng có tồn tại trong một lược đồ nhất định hay không

  • Nếu vai trò đang thực thi hàm này không có các đặc quyền cần thiết để tạo bảng mà bạn có thể muốn sử dụng SECURITY DEFINER cho chức năng và làm cho nó được sở hữu bằng một vai trò khác với các đặc quyền cần thiết. Phiên bản này đủ an toàn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Câu lệnh sql với đệ quy được diễn giải như thế nào?

  2. Rails:Lỗi khi cài đặt pg gem

  3. Truy vấn Rails 4 LIKE - ActiveRecord thêm dấu ngoặc kép

  4. Làm cách nào để cài đặt pg gem của PostgreSQL trên Ubuntu?

  5. @JoinColumn là gì và nó được sử dụng như thế nào trong Hibernate