Estimate/Print csv COPY 状态到 postgresql table

Estimate/Print csv COPY status to postgresql table

我想知道将 csv 复制到 postgresql 需要多长时间 table。有没有办法以合理的方式打印复制的行,或者有其他方法以某种方式显示复制的进度?

也许有一个冗长的设置,或者我应该使用 --echo 或 -qecho

我正在使用: psql -U postgres -d nyc_data -h localhost -c "\COPY rides FROM nyc_data_rides.csv CSV"

不幸的是没有这样的东西。

一个想法是将输入分成 1000 或 10000 行的块,然后逐行导入。这不会显着减慢处理速度,您可以快速估计整个导入需要多长时间。

正如 Laurenz Albe 所说,无法衡量完成整个过程还剩多少时间。但我今天做的一件事是:

  • 在我的 Linux
  • 中启动 "Monitor System"
  • 在这个应用程序中有一个计数器,显示自从我启动这个应用程序以来上传了多少数据
  • 根据我正在上传的文件的大小,我很好地预测了还有多少数据要发送到服务器。

使用 pv 工具

pv /tmp/some_table.csv | sudo -u postgres psql -d some_db -c "copy some_table from stdin delimiter ',' null '';"

因此,它将显示

1.42GiB 0:11:42 [2.06MiB/s] [===================================================================================================================================================================>] 100% 

在 Postgres 14 中,现在可以通过内部 pg_stat_progress_copy 视图查询活动 COPY 的状态。

例如观察处理的字节数和行数方面的进展:

select * from pg_stat_progress_copy \watch 1

参考文献: