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

KOPIUJ z dynamiczną nazwą pliku

Potrzebujesz dynamicznego 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() wymaga PostgreSQL 9.1+.
Przekaż nazwę pliku bez dodatkowego zestawu pojedynczych cudzysłowów (uciekłych):

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

format() z %L bezpiecznie usuwa nazwę pliku. Byłby podatny na wstrzyknięcie SQL bez tego.

Na bok , masz niezgodność nazwy funkcji:

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak pobrać kolumnę Postgres bytea jako plik?

  2. Jak połączyć ciągi w polu ciągu w zapytaniu PostgreSQL „grupuj według”?

  3. Przegląd parametrów połączenia libpq sslpassword w PostgreSQL 13

  4. Dialekt musi być wyraźnie podany od wersji 4.0.0

  5. kolejność kolumn w instrukcji SELECT * - gwarantowana?