par*_*eau 3 postgresql copy tab-delimited
我正在使用复制命令将制表符分隔文件的内容和标题复制到postgres中的表中。我以前使用过副本,所以我知道它是如何工作的,但是我有一个问题,我该如何解决文件中丢失的一些数据。
我已经使表具有与标题中的值相同的列名。
我收到的文件中的某些“列”只是空白。我只是为了使命令起作用而放入了虚假数据,但这将每周自动进行。我想知道是否只是要告诉人们确保他们的数据正确,还是有办法告诉copy命令在空白数据处输入NULL。
我以为我可能必须放在空白选项卡中,并且该字段将作为空值,但是我不确定这是否是最佳做法。
对于文档COPY指定,为默认值NULLs是\N。因此,按照@a_horse_with_no_name的建议将其更改为空是可行的方法。
另一种方法是使用任何其他工具预处理文件。我经常在脚本中执行以下操作:
psql dbname <<EOSQL
COPY tab FROM stdin WITH (FORMAT 'csv', DELIMITER E'\t', NULL 'NULL');
$(printf "1\t2\t3\n4\t\t6\n7\t8\t\n\t10\t11\n"| \
sed -e 's/\(\t\|^\)\(\t\|$\)/\1NULL\2/g')
\.
EOSQL
Run Code Online (Sandbox Code Playgroud)
可以代替printf您的文件。使用所需的任何操作。
注意:我在OSX上,因此sed语法可能因您而异。
另外,在当前的PostgreSQL CommitFest中,有一个补丁程序可以在COPY命令中添加通用的Pre和Post处理器。在这里您可以找到整个讨论。
| 归档时间: |
|
| 查看次数: |
8767 次 |
| 最近记录: |