标签: copy

postgres \copy 文件到 RDS 超时

Postgres 9.3 版,托管在 Amazon RDS 上。我有一个messages包含 10G 数据的表。我psql在 EC2 上使用连接了数据库。然后用

\COPY (select * from messages) TO '/tmp/messages.csv' WITH (FORMAT CSV, FORCE_QUOTE *)
Run Code Online (Sandbox Code Playgroud)

将所有消息复制到 EC2 上的文件中。

然后我尝试将文件复制回表:

\COPY messages FROM '/tmp/messages.csv' WITH (FORMAT CSV)
Run Code Online (Sandbox Code Playgroud)

大约 5 分钟后,我总是收到此错误。这个messages.csv文件大约10G。

connection not open
The connection to the server was lost. Attempting reset: Succeeded.
Run Code Online (Sandbox Code Playgroud)

我尝试了一个愚蠢的解决方案,通过将文件拆分为多个较小的主干来减少输入数据的大小。即每个 400MB。

split -l 1000000 messages.csv messages_
Run Code Online (Sandbox Code Playgroud)

这会创建多个较小的文件,每个文件 400MB。这工作正常。

但是有没有我可以更改的配置来保持大文件的连接?

我尝试设置tcp_keepalives_idle=7200andtcp_keepalives_interval=7200tcp_keepalives_count=5,但连接在 10-15 分钟后仍然丢失。

postgresql copy

5
推荐指数
0
解决办法
2096
查看次数

PostgreSQL COPY 命令是否可以选择将 CSV 列映射到的字段?

PostgreSQLCOPY命令是否可以选择将 CSV 列映射到的字段?

PostgreSQLCOPY命令似乎期望目标表与其列完全匹配。我错过了什么还是它实际上是如何工作的?

是否有一些替代命令可以启用它?

postgresql copy csv

5
推荐指数
1
解决办法
1万
查看次数

仅复制作为常规备份

我们计划从 SQL Server 2008 R2 升级到 SQL Server 2014,目的是使用可用性组。

其中一个辅助节点将用于进行备份。

我已经测试并发现,只要我有完整的仅复制,以及跨越仅复制到我们想要恢复到的时间的日志备份链,我就可以进行时间点恢复。

我们不使用差速器,也没有计划。

除了可能无法在没有“正常”备份的情况下缩小数据文件之外,我看不出这种方法的任何缺点。我们通常不会缩小我们的数据库,除非我们做一些事情来破坏它们,到那时我们无论如何都处于干预模式。

所以我的问题是,我会后悔走这条路吗?

sql-server backup availability-groups copy

5
推荐指数
1
解决办法
72
查看次数

postgresql 中的复制命令以追加数据

我正在copy从函数执行命令

execute 'copy (select * from tableName) to ''/tmp/result.txt'''
Run Code Online (Sandbox Code Playgroud)

它工作正常。但是,tableName是动态的,将有更多的表(循环迭代)。result.txt只有最后一次迭代(表)数据。

如果必须的话,我可以通过命令行使用\o>>附加到文件中。但是,我必须使用该功能。

我读了http://shuber.io/reading-from-the-filesystem-with-postgres/。它建议使用临时表的解决方案。我可以做类似的事情,但没有临时表吗?(我必须避免归档日志)。创建临时表会创建存档日志吗?

有没有办法copy在函数中附加命令?

postgresql postgresql-9.1 copy

5
推荐指数
2
解决办法
1万
查看次数

Vertica 的 COPY 是原子的吗?

看起来很简单,但我似乎无法在COPY.

Vertica 是COPY原子的吗?如果数据加载中断或以某种方式失败,Vertica 是否会负责清理工作?

vertica copy

4
推荐指数
1
解决办法
256
查看次数

解析 COPY 的二进制格式以访问 tsrange

tsrange 如何以二进制形式存储?

例如创建表

CREATE TABLE public.test (t tsrange);
INSERT INTO test VALUES ('[2010-01-01 14:30, 2010-01-01 15:30)');
INSERT INTO test VALUES ('[2011-01-01 14:31, 2015-11-01 15:30)');
INSERT INTO test VALUES ('[2017-01-01 14:31, 2018-11-01 15:30)');
COPY test TO '/tmp/pgcopy' WITH (FORMAT binary);
COPY test TO '/tmp/pgcopy.csv' WITH (FORMAT csv);
Run Code Online (Sandbox Code Playgroud)

它输出:

 cat /tmp/pgcopy.csv                                                                                                                                                                                                  
"[""2010-01-01 14:30:00"",""2010-01-01 15:30:00"")"
"[""2011-01-01 14:31:00"",""2015-11-01 15:30:00"")"
"[""2017-01-01 14:31:00"",""2018-11-01 15:30:00"")"


hexdump -C /tmp/pgcopy
00000000  50 47 43 4f 50 59 0a ff  0d 0a 00 00 00 00 00 00  |PGCOPY..........|
00000010 …
Run Code Online (Sandbox Code Playgroud)

postgresql dump date-format fields copy

4
推荐指数
1
解决办法
3791
查看次数

为什么 postgresql COPY 命令不能处理映射驱动器中的文件

我在将 CSV 文件从网络共享驱动器复制到 postgreSQL 时遇到问题,目前的解决方法是先将文件复制到本地驱动器,但这是链中的另一个过程,它变得过于混乱。

如果我运行以下命令

  COPY test_schema.test FROM 'X:\_Postgres DBs\Testing\test_file.csv' 
  CSV HEADER;
Run Code Online (Sandbox Code Playgroud)

我得到:

  ERROR:  could not open file "X:\_Postgres DBs\Testing\test_file.csv" 
  for reading: No such file or directory
Run Code Online (Sandbox Code Playgroud)

好的,所以 postgreSQL Server 不理解 Windows 映射驱动器,很好,但是如果我运行:

COPY test_schema.test FROM '\\ws7.domain.com\share-name\_Postgres
DBs\Testing\test_file2.csv' CSV HEADER;
Run Code Online (Sandbox Code Playgroud)

我得到:

  ERROR:  could not open file "\\ws7.domain.com\share-name\_Postgres
  DBs\Testing\test_file2.csv" for reading: Permission denied
Run Code Online (Sandbox Code Playgroud)

文件 test_file2.csv 可以在同一台服务器上本地打开,例如记事本/记事本++/写字板,因此看起来没有任何文件属性,例如“正在使用的文件”

任何人有任何提示如何将 COPY 与共享网络驱动器一起使用?(我们的数据库 UI 是用 Delphi 编码的,所以我正在寻找处理 postgresql 脚本的方法,我可以从 Delphi 调用,否则我将不得不编写一些繁琐的 Delphi Firedac 批处理方法。)

postgresql copy csv

3
推荐指数
1
解决办法
4813
查看次数

提高 postgres 中 COPY COMMAND 的速度

我想了解增加是否work_mem有助于提高命令的速度COPY

是否COPY使用work_memmaint_work_mem广泛使用?

postgresql performance copy postgresql-performance

2
推荐指数
1
解决办法
4984
查看次数

在 PostgreSQL 中将 unix/epoch 值解析为“TIMESTAMP”

PostgreSQL 的COPY命令对于快速导入大量数据非常有用,并且数据必须采用数据类型的文本表示形式。

我正在导入大量数据,包括一timestamp,但它存储为“unix time”,即自纪元以来的秒数。我可以将其转换为ISO 8601(例如2010-01-01 00:00:00,并且 PostgreSQL 接受 a 的转换timestamp。它不接受原始纪元值整数。

是否可以让 postgres 接受纪元整数值并将其解释/转换为时间戳?这将使我的代码更简单(也许更快)。

这适用于psql

create temporary table test1 ( v1 timestamp );
copy test1 from stdin ;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself, or an EOF     signal.
>> 2010-01-01 00:00:00
>> \.
COPY 1
Run Code Online (Sandbox Code Playgroud)

但这些没有:

copy test1 from stdin …
Run Code Online (Sandbox Code Playgroud)

postgresql optimization import timestamp copy

2
推荐指数
1
解决办法
1958
查看次数

将普通(原始)文件导入 postgres 表(bytea 和大对象)

将纯文件插入/复制到 postgres 表中的好方法是什么(最好使用psql命令行)?

就我而言,这些文件是来自 Maildir 档案的一堆电子邮件,所以我尝试使用COPY

psql -c "COPY emails (data) FROM '/tmp/emailfile' WITH (FORMAT text);" emails
Run Code Online (Sandbox Code Playgroud)

我将在 for 循环 shell 脚本中使用它 ( for file in $(ls dir); do psql ...; done)。

但是,我无法找到文件中不可能存在的良好“分隔符”,并且我收到以下错误:ERROR: extra data after last expected column

因此,我考虑使用数据库中的COPY ... FORMAT binary版本和字段(然后将列转换到数据库内部),但这需要文件头和预告片,我没有简单的方法来即时构建。BYTEATEXT

有没有一种简单的方法可以从命令行执行此操作,或者我需要为此编写一个 python 脚本吗?

postgresql psql import copy

2
推荐指数
1
解决办法
6046
查看次数