sql >> Database teknologi >  >> RDS >> PostgreSQL

COPY med dynamisk filnavn

Du skal bruge dynamisk 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() kræver PostgreSQL 9.1+.
Send filnavnet uden ekstra sæt (escaped) enkelte anførselstegn:

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

format() med %L undslipper filnavnet sikkert. Ville være modtagelig for SQL-injektion uden det.

Bortset , du har et funktionsnavn, der ikke stemmer overens:

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



  1. ORA-20001 i R12 Indsaml skemastatistik på 11g(FND_HISTOGRAM_COLS)

  2. Hvordan kan jeg importere en database med MySQL fra terminal?

  3. Hvordan har man komplet offline funktionalitet i en webapp med PostgreSQL-database?

  4. SQL - Kombinerer flere lignende forespørgsler