Postgres使用CSV数据从变量复制

我知道你可以从文件中运行这样的复制命令:

"COPY zip_codes FROM '/path/to/csv/ZIP_CODES.txt' DELIMITER ',' CSV;" 

我想从ruby变量中复制csv数据,所以我可以这样做

 "COPY zip_codes FROM '#{csv_data}' DELIMITER ',' CSV;" 

使用SQL COPY命令是不可能的。 COPY仅从文件STDIN复制。

您可以将变量的内容写入文件,也可以通过STDIN对其进行管道传输。 只有几行才有意义。


我想在更新之前我误解了你的问题,你可能不需要这个:

文件路径不能像其他数据项一样进行交换,也不能使用预准备语句。 在执行或使用服务器端函数的动态SQL之前构建整个语句,如:

 CREATE OR REPLACE FUNCTION f_cp(_file text) RETURNS void AS $BODY$ BEGIN EXECUTE format($$COPY zip_codes FROM %L DELIMITER ',' CSV$$, $1); END $BODY$ LANGUAGE plpgsql; 

呼叫:

 SELECT f_cp('/var/lib/postgres/sync/myfile.csv') 

format()需要Postgres 9.1或更高版本。