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

Các biến cho số nhận dạng bên trong NẾU TỒN TẠI trong một hàm plpgsql

CREATE OR REPLACE FUNCTION drop_now()
  RETURNS void AS
$func$
DECLARE
   _tbl   regclass;
   _found int;
BEGIN
   FOR _tbl IN 
      SELECT relid
      FROM   pg_stat_user_tables
      WHERE  schemaname = 'public'
      AND    relname LIKE '%test%'
   LOOP
      EXECUTE format($f$SELECT 1 FROM %s
                        WHERE  tm < now() - interval '90 min'$f$, _tbl);
      GET DIAGNOSTICS _found = ROW_COUNT;
      IF _found > 0 THEN
         -- EXECUTE 'DROP TABLE ' || _tbl;
         RAISE NOTICE 'Dropped table: %', _tbl;
      END IF;
   END LOOP;
END
$func$ LANGUAGE plpgsql;

Những điểm chính

  • hàng là một từ dành riêng trong tiêu chuẩn SQL. Nó được phép sử dụng ở Postgres, nhưng nó vẫn không khôn ngoan. Tôi khiến việc thêm vào trước biến psql với dấu gạch dưới _ là một điều khó hiểu để tránh bất kỳ xung đột đặt tên nào.

  • Bạn không chọn toàn bộ hàng dù sao, chỉ là tên bảng trong ví dụ này. Tốt nhất hãy sử dụng một biến kiểu regclass , do đó tránh được việc đưa vào SQL bằng cách tự động đặt tên bảng bất hợp pháp. Chi tiết trong câu trả lời có liên quan này:
    Tên bảng dưới dạng tham số hàm PostgreSQL

  • Bạn không cần LIMIT trong một EXISTS biểu thức, chỉ kiểm tra sự tồn tại của bất kỳ hàng. Và bạn không cần các cột mục tiêu có ý nghĩa vì lý do tương tự. Chỉ cần viết CHỌN 1 hoặc SELECT * hoặc cái gì đó .

  • Bạn cần SQL động cho các truy vấn có số nhận dạng thay đổi. SQL thuần không cho phép điều đó. Tức là:xây dựng một chuỗi truy vấn và THỰC HIỆN nó. Chi tiết trong câu trả lời có liên quan chặt chẽ này:
    SQL động (THỰC HIỆN) làm điều kiện cho câu lệnh IF

  • Điều này cũng đúng với một DROP nếu bạn muốn chạy nó. Tôi đã thêm một nhận xét.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn MySQL / Postgres dữ liệu khoảng thời gian 5 phút

  2. Cách chỉ định Tên ứng dụng trong chuỗi kết nối NpgSql

  3. Chọn hồ sơ dựa trên ngày cuối cùng

  4. Chọn từ Cơ sở dữ liệu dựa trên danh sách các cặp duy nhất

  5. Buộc cài đặt Postgres bằng mã hóa UTF8, không phải LATIN1?