自定义文本文件名postgres 9.6

问题描述 投票:0回答:1

我有一个问题,我生成一个创建临时表的函数,我用它来创建一个文本文件,直到生成的所有内容都是我需要的。

但是在我创建的文件的名称中,我需要传递一个参数(基本上是我的数据库中的表中的列的值),但是当尝试传递值时,我得到一个错误或者只是创建一个文件一个名称,它有特殊字符。

到目前为止尝试了以下内容:

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命令自定义文件名?

postgresql
1个回答
0
投票

例如:

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
© www.soinside.com 2019 - 2024. All rights reserved.