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

Thêm một cột vào bảng trong tất cả các lược đồ của cơ sở dữ liệu PostgreSQL

DO
$do$
DECLARE
  _schema text;
  _sp
BEGIN
   FOR _schema IN
      SELECT quote_ident(nspname)  -- prevent SQL injection
      FROM   pg_namespace n
      WHERE  nspname !~~ 'pg_%'
      AND    nspname <>  'information_schema'
   LOOP
      EXECUTE 'SET LOCAL search_path = ' || _schema;
      ALTER TABLE product ADD COLUMN show_price boolean NOT NULL DEFAULT TRUE;
   END LOOP;
END
$do$

Bạn có thể lặp lại các mục trong bảng danh mục hệ thống bằng mã <> LÀM tuyên bố . Yêu cầu Postgres 9.0 trở lên .
Bạn cũng có thể tạo một hàm . DO câu lệnh sử dụng ngôn ngữ thủ tục plpgsql theo mặc định.

Danh mục hệ thống duy nhất bạn cần là pg_namespace , nắm giữ các lược đồ của cơ sở dữ liệu. Lặp qua tất cả các lược đồ ngoại trừ các lược đồ hệ thống đã biết.

Đảm bảo rằng bạn được kết nối với cơ sở dữ liệu phù hợp!

Để thêm cột vào bảng có mã NOT NULL ràng buộc, bạn cũng phải cung cấp một giá trị mặc định để điền vào cột mới. Về mặt logic thì không thể khác được. Tôi đã thêm DEFAULT TRUE , điều chỉnh theo nhu cầu của bạn.

Tránh chèn SQL bằng cách trích dẫn các số nhận dạng được truy xuất từ ​​các bảng danh mục hệ thống đúng cách. quote_ident () trong trường hợp này. [Có nhiều lựa chọn hơn. Xem:

Bạn cần SQL động. "Thủ thuật" chính là chỉ đặt search_path động, vì vậy có thể chạy đi chạy lại cùng một câu lệnh. Tác dụng của ĐẶT VỊ TRÍ kéo dài cho đến khi kết thúc giao dịch. Bạn có thể sử dụng RESET search_path hoặc lưu trạng thái trước đó và đặt lại nếu bạn cần thực hiện nhiều thao tác hơn trong cùng một giao dịch với nó (không chắc):

SHOW search_path INTO _text_var;
...
EXECUTE 'SET search_path = ' || _text_var;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tạo chỉ mục trên trường json trong PostgreSQL 9.2

  2. Kiểm tra KHÔNG ĐẦY ĐỦ cho một bản ghi không trả về TRUE khi biến được đặt

  3. Lỗi postgres:giá trị null trong id cột - trong quá trình chèn

  4. Gọi một hàm do người dùng xác định nằm trong postgres.c trong postgreSQL bằng cách sử dụng GUI được xác định bởi netbeans

  5. PostgreSQL - làm thế nào để xác định xem một giao dịch có đang hoạt động hay không?