Postgresql 删除Postgres转储中的换行符

Postgresql 删除Postgres转储中的换行符,postgresql,import,sed,export,Postgresql,Import,Sed,Export,我正在尝试格式化postgres转储(pg_转储),以便能够使用JDBC连接导入它。pg_dump将包含换行符的文本字段导出为带换行符的文本,因此当我稍后尝试使用JDBC导入时,我到达了行的末尾,语句失败 我要做的是获取转储,将其通过sed并转义所有换行符,这样每行就有一条INSERT语句。问题是我不能删除所有的换行符,但我可以删除所有不匹配的换行符\n插入到。有没有简单的方法可以做到这一点 更新: 示例如下所示: INSERT INTO sometable (123, And here goe

我正在尝试格式化postgres转储(pg_转储),以便能够使用JDBC连接导入它。pg_dump将包含换行符的文本字段导出为带换行符的文本,因此当我稍后尝试使用JDBC导入时,我到达了行的末尾,语句失败

我要做的是获取转储,将其通过
sed
并转义所有换行符,这样每行就有一条
INSERT
语句。问题是我不能删除所有的换行符,但我可以删除所有不匹配的换行符\n插入到。有没有简单的方法可以做到这一点

更新: 示例如下所示:

INSERT INTO sometable (123, And here goes some text
with
newlines
in
it', 'some more fields');
INSERT INTO sometable (123, And here goes some text\nwith\nnewlines\nin\nit', 'some more fields');
我想要的结果是这样的:

INSERT INTO sometable (123, And here goes some text
with
newlines
in
it', 'some more fields');
INSERT INTO sometable (123, And here goes some text\nwith\nnewlines\nin\nit', 'some more fields');

因此,每个
INSERT
语句都在一行上,并转义字符串的换行符。

不是
sed
解决方案,但以下方法是否可行

cat test_dump.txt | perl -pe "s/[^(\);INSERT INTO)]\n/\\$1\\n/"

您可以在vim中执行此操作

vim my_dump.sql

:%s/\();\)\@<!\n\(INSERT\)\@!//c
vim my_dump.sql
:%s/\();\)\@
%。。对所有行执行此操作
s替换
\n。。换行符(Unix风格;您知道,Windows有
\r\n
和Apple
\r
用于换行符?)

标志:
C确认每次替换(首先用于测试)

关于负向前看和向后看的信息
:救命\@
:救命\@
sed通常在线路上运行,需要特意更换线路中断。

谷歌搜索“sed多行替换”,你会发现类似的东西。

你的问题描述非常混乱。您能否显示示例“转储”,以及最终输出所需的内容(仅显示前一行或后两行)。祝你好运。刚刚添加了一个示例来显示我正在寻找的内容。你最好更改SQL解析器,以便能够处理跨几行的字符文本。这很有帮助,但这为我节省了pg_dump--dbname=my_db_name--column inserts-C | perl-pe“{if(/^INSERT-INTO/and!/^INSERT-INTO.*)$/){chomp;}”