Coba formulir yang sangat disederhanakan ini:
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;
Poin utama:
-
Anda dapat menetapkan variabel dalam plpgsql pada waktu deklarasi. Menyederhanakan kode.
-
Gunakan
to_char()
untuk memformat tanggal Anda. Jauh lebih sederhana. -
now()
danCURRENT_TIMESTAMP
lakukan hal yang sama. -
Jangan mengutip
'now()'
, gunakannow()
(tanpa tanda kutip) jika Anda menginginkan stempel waktu saat ini. -
Gunakan
USING
klausa denganEXECUTE
, jadi Anda tidak perlu mengonversitimestamp
ketext
dan kembali - mungkin mengalami mengutip masalah seperti yang Anda lakukan. Lebih cepat, lebih sederhana, lebih aman. -
Dalam
LANGUAGE plpgsql
,plpgsql
adalah kata kunci dan tidak boleh dikutip. -
Anda mungkin ingin memeriksa apakah tabel sudah ada dengan
CREATE TABLE IF NOT EXISTS
, tersedia sejak PostgreSQL 9.1.