PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

COPY с динамично име на файл

Нуждаете се от динамичен 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() изисква PostgreSQL 9.1+.
Предаване на името на файла без допълнителен набор от (избягали) единични кавички:

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

format() с %L избягва безопасно името на файла. Ще бъде податлив на SQL инжекция без него.

Настрана , имате несъответствие на името на функцията:

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. Плъзгаща се средна въз основа на времеви печати в PostgreSQL

  2. PostgreSQL:Паралелизъм на заявките в действие

  3. УНИКАЛНО ОГРАНИЧЕНИЕ на Postgres за масив

  4. Как да избягате от низ, докато съвпадате с шаблон в PostgreSQL

  5. SQL заявка за получаване на всички стойности, които едно изброяване може да има