Postgres使用CSV数据从变量复制

时间:2013-06-07 19:15:09

标签: sql ruby-on-rails postgresql active-record-query

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

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

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

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

1 个答案:

答案 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或更高版本。