Zkuste tento značně zjednodušený formulář:
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;
Hlavní body:
-
Proměnné můžete přiřadit v plpgsql v době deklarace. Zjednodušuje kód.
-
Použijte
to_char()
pro formátování data. Mnohem jednodušší. -
nyní()
aCURRENT_TIMESTAMP
udělejte totéž. -
Neuvádějte
'now()'
, použijtenow()
(bez uvozovek), pokud chcete aktuální časové razítko. -
Použijte
POUŽITÍ
klauzule sEXECUTE
, takže nemusíte převádětčasové razítko
natext
a zpět – možná narazíte na citování problémy jako ty. Rychlejší, jednodušší, bezpečnější. -
V
LANGUAGE plpgsql
,plpgsql
je klíčové slovo a nemělo by být uváděno v uvozovkách. -
Možná budete chtít zkontrolovat, zda tabulka již existuje pomocí
CREATE TABLE IF NOT EXISTS
, dostupný od PostgreSQL 9.1.