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