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

Trạng thái SQL:lỗi cú pháp 42601 tại hoặc gần 11

Hãy thử biểu mẫu được đơn giản hóa phần lớn này:

CREATE OR REPLACE FUNCTION somefunc()
  RETURNS void AS
$func$
DECLARE
 addresstablename text := 'address_history_' || to_char(now(), 'FMDD_MM_YYYY');

BEGIN
 EXECUTE 
 'CREATE TABLE ' || addresstablename || '() INHERITS (address_all)';

 EXECUTE
 'INSERT INTO ' || addresstablename || '
  SELECT *
  FROM   address_history
  WHERE  address_timestamp >= $1'
 USING date_trunc('hour', now() - interval '7 days');

END
$func$ LANGUAGE plpgsql;

Những điểm chính:

  • Bạn có thể gán các biến trong plpgsql tại thời điểm khai báo. Đơn giản hóa mã.

  • Sử dụng to_char () để định dạng ngày của bạn. Đơn giản hơn nhiều.

  • now () CURRENT_TIMESTAMP làm tương tự.

  • Đừng trích dẫn 'now ()' , sử dụng now () (không có dấu ngoặc kép) nếu bạn muốn dấu thời gian hiện tại.

  • Sử dụng SỬ DỤNG mệnh đề với EXECUTE , vì vậy bạn không phải chuyển đổi dấu thời gian thành văn bản và quay lại - có thể gặp phải trích dẫn những vấn đề như bạn đã làm. Nhanh hơn, đơn giản hơn, an toàn hơn.

  • Trong LANGUAGE plpgsql , plpgsql là một từ khóa và không nên được trích dẫn.

  • Bạn có thể muốn kiểm tra xem bảng đã tồn tại hay chưa bằng TẠO BẢNG NẾU KHÔNG TỒN TẠI , có sẵn kể từ PostgreSQL 9.1.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Loại bỏ các hàng trùng lặp trong Postgres

  2. thiếu mục nhập mệnh đề FROM cho bảng

  3. PostgreSQL có chạy một số tối ưu hóa hiệu suất cho các giao dịch chỉ đọc không

  4. UTF16 hex thành văn bản

  5. chuyển dữ liệu từ cơ sở dữ liệu này sang cơ sở dữ liệu khác trong odoo