- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这样的 csv 行:
"aaa"|"bbb"|"ccc"|"dddd
eeeee"
我想使用 pgloader ( http://pgloader.io/ ) 或 PostgreSQL COPY ( https://www.postgresql.org/docs/9.6/static/sql-copy.html ) 导入这些数据。我的问题是,根据 CSV 标准,在引用的字段值内可能有换行符 (\n)。但是 pgloader 和 COPY 命令将其视为一个全新的数据行,而不是一个内部有换行符的列。
COPY schema.table (
col_aaa,
col_bbb,
col_ccc,
col_ddd
)
FROM 'file.csv' WITH DELIMITER '|' ENCODING 'LATIN1' CSV;
我的复制命令我的 pgloader 命令
LOAD CSV
FROM 'file.csv'
INTO postgresql://user:password@host:5432/database?schema.table (col_aaa, col_bbb, col_ccc, col_ddd)
WITH
skip header = 0,
fields optionally enclosed by '"',
fields escaped by double-quote,
fields terminated by '|'
SET client_encoding to 'latin1'
BEFORE LOAD DO
$$ TRUNCATE anac.aerodromos_csv RESTART IDENTITY; $$;
我从 PostgreSQL 文档和谷歌中搜索了很多。
我唯一发现的是:Parsing CSV file with \n in double quoted fields但是 awk 对于超过 100 万行的文件来说太慢了。
关于如何做的任何提示?
我更喜欢 pgloader,但我可以接受使用 sed 或 perl 作为正则表达式代理在 linux shell 脚本中处理文件。
关于如何做的任何线索?
最佳答案
为了给你解决这个问题的想法,我写了这个例子。
我刚刚假设文件将只包含 4 列并且只包含 1 个换行符。如果不是这种情况,那么您需要更改它。
输入文件:
"aaa"|"bbb"|"ccc"|"ddddeeeee"
"aaa"|"bbb"|"ccc"|"ddddeeeee"
"aaa"|"bbb"|"ccc"|"dddd
eeeee"
"aaa"|"bbb"|"cc
c"|"ddddeeeee"
"aaa"|"bbb"|"ccc"|"ddddeeeee"
"aaa"|"bbb"|"ccc"|"ddddeeeee"
"aaa"|"b
bb"|"ccc"|"ddddeeeee"
"aaa"|"bbb"|"ccc"|"ddddeeeee"
"aaa"|"bbb"|"ccc"|"ddddeeeee"
"a
aa"|"bbb"|"ccc"|"ddddeeeee"
"aaa"|"bbb"|"ccc"|"ddddeeeee"
"aaa"|"bbb"|"ccc"|"ddddeeeee"
"aaa"|"bbb"|"ccc"|"ddddeeeee"
"aaa"|"bbb"|"ccc"|"dddd
eeeee"
script.pl
#!/usr/bin/perl
use strict; use warnings; use Data::Dumper;
open ( my $RFH, '<', 'input.io' ) or die ($!);
open ( my $WFH, '>', 'output.o' ) or die ($!);
my $line_break = 0;
my $old_line = '';
while ( my $line = <$RFH> ) {
chomp($line);
if ( ! $line_break ){
my @columns = split( /\|/, $line );
if ( scalar( @columns ) == 4 && $columns[3] =~ m/"$/ ){
print $WFH $line."\n";
}
else{
$line_break = 1;
$old_line = $line;
next;
}
}
else{
$line = $old_line . $line;
$old_line = '';
$line_break = 0;
print $WFH $line."\n";
}
}
close($RFH);
close($WFH);
输出文件:
"aaa"|"bbb"|"ccc"|"ddddeeeee"
"aaa"|"bbb"|"ccc"|"ddddeeeee"
"aaa"|"bbb"|"ccc"|"ddddeeeee"
"aaa"|"bbb"|"ccc"|"ddddeeeee"
"aaa"|"bbb"|"ccc"|"ddddeeeee"
"aaa"|"bbb"|"ccc"|"ddddeeeee"
"aaa"|"bbb"|"ccc"|"ddddeeeee"
"aaa"|"bbb"|"ccc"|"ddddeeeee"
"aaa"|"bbb"|"ccc"|"ddddeeeee"
"aaa"|"bbb"|"ccc"|"ddddeeeee"
"aaa"|"bbb"|"ccc"|"ddddeeeee"
"aaa"|"bbb"|"ccc"|"ddddeeeee"
"aaa"|"bbb"|"ccc"|"ddddeeeee"
"aaa"|"bbb"|"ccc"|"ddddeeeee"
根据您的需要更改此示例。希望这会有所帮助。
关于postgresql - 当双引号内有\n(换行符)时,如何使用 pgloader 或 PostgreSQL 副本解析 CSV?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44419059/
我正在使用 suplot2grid 绘制 6 个子图,每个子图内部都有 2 个时间序列。每个子图都应在不同的 Y(垂直)轴上显示值。 我当前的输出接近我的目标,但仍然错误,如下所示: 现在我所做的事情
我想在两个斜杠之后使用带有操作的 Controller ,就好像它是操作中的操作一样。 示例:.../Administration/Institution/Register/Id 我正在使用解决方案:
在下面的查询中,我想在 CASE 的 WHEN 和 THEN 之前添加一个 AND 条件是否可行? 例如 WHEN 'r' AND table1.name="jones"THEN 'very high
在下面的查询中,我想在 CASE 的 WHEN 和 THEN 之前添加一个 AND 条件是否可行? 例如 WHEN 'r' AND table1.name="jones"THEN 'very high
我有一个标题标签,定义如下: private lazy var titleLabel: UILabel = { let label = UILabel() label.numberOfLines
我应该如何为我的以下场景实现 TableView -数据源架构: 两个 View Controller ,每个 View Controller 都包含自己的 TableView 。 表格 View 单
这一直让我发疯,从来没有找到正确的答案。 我想实现以下目标: http://juicybyte.com/stack-overflow.jpg 意思是,我想在左侧的 div 上放置一个图像,并根据内容的
我在 Firefox 正确显示切换的 div 时遇到问题。我看过其他问题,但似乎没有一个涉及同一问题。 我在两个正在切换的 div 中都有一个 wufoo 表单,这是我的代码。 $(document
我想要实现的目标非常简单。我有一个带有展开/折叠图标和问号图标的 div。当用户单击这些图标之一时,相应的隐藏 div 应向下滑动。 当用户单击展开/折叠图标而不是问号时,此功能有效。 HTML:
我有这样的东西: google Hello World 我想为所有 应用边框有一个 里面。但我不能使用 id因为此代码需要适用于任何页面,而我无法控制 ID。这可以通过 CSS
我正在尝试在各自的 docker 容器中运行 Node 和 nginx,并从 nginx 到 Node 进行代理。我首先尝试了下面的配置没有docker并且它有效。但是,当使用 docker 时,它不
使用 try-catch-finally 结构来检索数据库记录,似乎我需要在 try block 内返回一个值,以防万一一切正常(如出现异常,函数的末尾并不意味着到达)。但是如果我返回到 try 内部
我是一名优秀的程序员,十分优秀!