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 ()
vàCURRENT_TIMESTAMP
làm tương tự. -
Đừng trích dẫn
'now ()'
, sử dụngnow ()
(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ớiEXECUTE
, vì vậy bạn không phải chuyển đổidấu thời gian
thànhvă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.