sql >> Databasteknik >  >> RDS >> PostgreSQL

COPY med dynamiskt filnamn

Du behöver 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+.
Skicka in filnamnet utan extra uppsättning (escaped) enkla citattecken:

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

format() med %L undkommer filnamnet på ett säkert sätt. Skulle vara mottaglig för SQL-injektion utan det.

Åsido , du har ett funktionsnamn som inte matchar:

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



  1. Virtualmin:Du har inte tillgång till den här MySQL-databasen efter att ha ändrat lösenord

  2. Hur hämtar man en uppsättning tecken med SUBSTRING i SQL?

  3. Typer av tabellrelationer i MS Access

  4. Hur kan jag hasha lösenord i postgresql?