sql >> Databáze >  >> RDS >> PostgreSQL

COPY s dynamickým názvem souboru

Potřebujete dynamické SQL :

CREATE OR REPLACE FUNCTION loaddata(filepathname text)
  RETURNS void AS
$func$
BEGIN
   EXECUTE format ('
   COPY climatedata(
         climatestationid
       , date
         ... -- more columns 
       , tminsflag)
   FROM %L (FORMAT CSV, HEADER)'  -- current syntax
           -- WITH CSV HEADER'    -- tolerated legacy syntax
   , $1);  -- pass function parameter filepathname to format() 
END
$func$ LANGUAGE plpgsql;

format() vyžaduje PostgreSQL 9.1+.
Předejte název souboru bez další sady (escapovaných) jednoduchých uvozovek:

SELECT loaddata('/absolute/path/to/my/file.csv')

format() s %L bezpečně unikne z názvu souboru. Mohlo by dojít k vložení SQL bez toho.

Na stranu , máte nesoulad názvu funkce:

CREATE OR REPLACE FUNCTION public.loaddata(filepathname varchar)
...
ALTER FUNCTION public.filltmaxa(character varying)



  1. Neo4j - Vytvořte omezení pomocí Cypher

  2. Jak date_part() funguje v PostgreSQL

  3. 4 Předdefinované metody konverze dat SQL a případy použití

  4. Při spouštění balíčku došlo k chybě