【问题标题】:Save data to file txt or csv from postgres从 postgres 将数据保存到文件 txt 或 csv
【发布时间】:2021-02-11 17:52:04
【问题描述】:

请告诉我执行更新语句时是否可以保存任何数据文件?

我在 postgres pgadmin / psql 中执行这个函数

do
$$
declare 
    nr int;
    status varchar(100);
begin
    select count(*) into nr from film where title = 'Academy Dinosaur';
    if nr = 1 then
        update film
        set length = 1000
        where title = 'Academy Dinosaur';
        status := 'Success';
        end if;
end;$$

我想写入文件(如果更新成功执行)是这样的: 标题 = 标题,状态 = 成功(如果成功)但我不知道如何执行此操作以及如何将状态值返回到文件?我不想复制所有表格。

【问题讨论】:

  • 整个 PL/pgSQL 块是完全没有必要的。您可以直接运行 UPDATE 会更快,因为不会执行无用的select count(*)
  • @a_horse_with_no_name 我知道这只是一个例子,当这个块成功执行时我不知道如何记录信息。在我的真实块中,我检查了是否找到了任何行。如果不是,我想记录信息:状态:文件不存在

标签: postgresql psql pgadmin


【解决方案1】:
do language plpgsql
$$
brgin
 update film
    set length = 1000
  where title = 'Academy Dinosaur';
 if FOUND then
   copy (select format('Title = %s, Status = %s', 'Academy Dinosaur', 'Success')) 
     to 'path-to-your-file';
 enf if;
end;
$$;

format 和文本替换仅适用于您想要使用变量的情况。否则只是(select 'Title = Academy Dinosaur, Status = Success')

【讨论】:

  • 一个问题我完成了路径'C:\桌面',我在Windows终端中运行有问题吗?像这样: psql -h localhost -p 5432 -U user-d db -f C:\Desktop\script.sql 在这个文件中我有脚本,我在其中放置了输出文件,但是我得到了错误字符,字节序列为 0xc5 0xbc 编码“ UTF8”在编码“WIN1252”方面没有等效项我在谷歌中寻找,但仍然没有任何帮助
  • 除非我能够在有 linux 基础的服务器上运行它。现在我在 Windows 上的复制仍然存在问题:错误:\copy 中或附近的语法错误(选择'Title = aaaa,Status =wwwww' 我正在尝试这个:\copy(选择'Title = aaaa,Status =success') 'C:\Users\Desktop\output.csv';
  • COPY 在服务器上读写文件。正如服务器进程所见,'path-to-your-file' 应该在服务器上是本地的。它不能引用终端上的位置。顺便说一句,plpgsql 脚本和 psql 命令不是一回事。
  • 好的,明天我将尝试在我的 postgres 服务器上运行这个脚本,它可以在 linux 上运行,我希望它可以工作:) 今天我通过 psql 运行这个脚本,因为我在 Wndows 上创建了一个 postgres 服务器,我希望当我在 Windows 终端中像这样运行 psql -h localhost -p 5432 -U user-d db -f C:\Desktop\script.sql 时会起作用。
  • 我知道存在 \copy 以在 windows 中的 psql 中运行,这可行,但 \copy 以所有表为例,我想将特定信息记录到文件中。
猜你喜欢
  • 2020-03-29
  • 1970-01-01
  • 2015-06-10
  • 2020-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-14
相关资源
最近更新 更多