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

Cách chọn từ biến là tên bảng n Postgre> =9.2

Câu trả lời đúng là nhận xét của Anton Kovalenko

Bạn không thể sử dụng biến làm tên bảng hoặc cột trong SQL nhúng.

UPDATE dynamic_table_name SET ....

PostgreSQL sử dụng một kế hoạch được chuẩn bị và lưu cho SQL nhúng, và các tham chiếu đến một đối tượng đích (bảng) được mã hóa sâu và cứng trong các kế hoạch - một số đặc điểm có tác động đáng kể đến kế hoạch - đối với một bảng có thể được sử dụng chỉ mục, còn bảng khác thì không. Lập kế hoạch truy vấn tương đối chậm, vì vậy PostgreSQL không thử nó một cách minh bạch (không có một số ngoại lệ).

Bạn nên sử dụng SQL động - một mục đích được sử dụng cho các tình huống tương tự. Bạn luôn tạo một chuỗi SQL mới và các kế hoạch không được lưu

DO $$
DECLARE r record;
BEGIN
  FOR r IN SELECT table_name 
              FROM information_schema.tables
             WHERE table_catalog = 'public'
  LOOP
    EXECUTE format('UPDATE %I SET id = 10 WHERE id = 15', r.table_name);
  END LOOP;
END $$;

Lưu ý:SQL động không an toàn (có một SQL injection rủi ro) mà không cần làm sạch thông số. Tôi đã sử dụng một hàm " định dạng "cho nó. Cách khác là sử dụng" quote_ident "chức năng.

EXECUTE 'UPDATE ' || quote_ident(r.table_name) || 'SET ...



  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 và CHỌN trong một truy vấn duy nhất?

  2. Cách tạo biểu đồ trong PostgreSQL

  3. Thêm tổng số hàng thông qua Marshmallow với @post_dump?

  4. Sử dụng nhiều mục tiêu xung đột trong mệnh đề ON CONFLICT

  5. Hiển thị tên cột với giá trị tối đa giữa một số cột