我知道您可以从文件中运行这样的复制命令:
"COPY zip_codes FROM '/path/to/csv/ZIP_CODES.txt' DELIMITER ',' CSV;"
我想从ruby变量复制csv数据,所以我可以这样做
"COPY zip_codes FROM '#{csv_data}' DELIMITER ',' CSV;"
答案 0 :(得分:3)
使用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或更高版本。