我有一个问题,我生成一个创建临时表的函数,我用它来创建一个文本文件,直到生成的所有内容都是我需要的。
但是在我创建的文件的名称中,我需要传递一个参数(基本上是我的数据库中的表中的列的值),但是当尝试传递值时,我得到一个错误或者只是创建一个文件一个名称,它有特殊字符。
到目前为止尝试了以下内容:
CREATE OR REPLACE FUNCTION sp_campos_base2()
RETURNS TEXT AS $$
DECLARE
registro TEXT DEFAULT '';
var1 TEXT;
...
BEGIN
var1 := 'LO_LOGRE';
....
EXECUTE $$COPY (select * from tmp1) to '/tmp/editores/prueba_$$ || var1 || $$_OMS.txt' WITH DELIMITER E'\t' CSV HEADER ENCODING 'LATIN1'$$;
.....
COPY (select * from tmp1) to '/tmp/editores/prueba_|| var1 ||_OMS.txt' WITH DELIMITER E'\t' CSV HEADER ENCODING 'LATIN1';
....
直到尝试使用bash语法:
COPY (select * from tmp1) to '/tmp/editores/prueba_`var1`_OMS.txt' WITH DELIMITER E'\t' CSV HEADER ENCODING 'LATIN1';
....
是否可以使用COPY命令自定义文件名?
例如:
do
$$
declare
var1 text := 'some';
begin
execute format('copy pg_database to %L','/tmp/'||var1||'.csv');
end;
$$
;
并检查:
t=# \! head -n 2 /tmp/some.csv
postgres 10 6 C UTF-8 f t -1 12668 858 1 1663 \N
t 10 6 C UTF-8 f t -1 12668 858 1 1663 \N