PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

SQL-Status:42601 Syntaxfehler bei oder nahe 11

Versuchen Sie es mit dieser stark vereinfachten Form:

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;

Hauptpunkte:

  • Sie können Variablen in plpgsql zum Zeitpunkt der Deklaration zuweisen. Vereinfacht den Code.

  • Verwenden Sie to_char() um Ihr Datum zu formatieren. Viel einfacher.

  • now() und CURRENT_TIMESTAMP tun Sie dasselbe.

  • 'now()' nicht zitieren , verwenden Sie now() (ohne Anführungszeichen), wenn Sie den aktuellen Zeitstempel möchten.

  • Verwenden Sie den USING -Klausel mit EXECUTE , sodass Sie den timestamp nicht konvertieren müssen zu text und zurück - möglicherweise in Zitate geraten Probleme wie Sie. Schneller, einfacher, sicherer.

  • In LANGUAGE plpgsql , plpgsql ist ein Schlüsselwort und sollte nicht in Anführungszeichen gesetzt werden.

  • Sie können mit CREATE TABLE IF NOT EXISTS , verfügbar seit PostgreSQL 9.1.