PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Stan SQL:błąd składni 42601 w okolicach 11

Wypróbuj tę w dużym stopniu uproszczoną 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;

Główne punkty:

  • Możesz przypisać zmienne w plpgsql w czasie deklaracji. Upraszcza kod.

  • Użyj to_char() aby sformatować swoją datę. Dużo prostsze.

  • now() i CURRENT_TIMESTAMP zrób to samo.

  • Nie cytuj 'now()' , użyj now() (bez cudzysłowów), jeśli chcesz aktualny znacznik czasu.

  • Użyj USING klauzula z EXECUTE , więc nie musisz konwertować sygnatury czasowej do tekstu iz powrotem - prawdopodobnie wpadnie w cytowanie problemy takie jak ty. Szybciej, prościej, bezpieczniej.

  • W języku JĘZYK plpgsql , plpgsql jest słowem kluczowym i nie powinno być cytowane.

  • Możesz sprawdzić, czy tabela już istnieje z CREATE TABELA JEŚLI NIE ISTNIEJE , dostępny od wersji 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. Problemy z ograniczeniami PostgreSQL

  2. Jak wypróbować wiele opcji SELECT, aż wynik będzie dostępny?

  3. Wdrażanie i skalowanie PostgreSQL v13 za pomocą ClusterControl 1.8.2

  4. Postgresql zmienia wartość null na zero

  5. Symulować CREATE DATABASE JEŚLI NIE ISTNIEJE dla PostgreSQL?