Postgresql 在Postgres中从制表符分隔的文件复制到表

Postgresql 在Postgres中从制表符分隔的文件复制到表,postgresql,copy,tab-delimited,Postgresql,Copy,Tab Delimited,我正在使用copy命令将带有标题的制表符分隔文件的内容复制到postgres中的表中。我以前使用过copy,所以我知道它是如何工作的,但是我有一个问题,关于如何避免文件中丢失的一些数据 我预先制作了表,使其具有与标题中的值相同的列名 我收到的文件中的一些“列”是空白的。我把假数据放进去只是为了让命令正常工作,但这是每周都会自动完成的事情。我想知道我是否需要告诉人们确保他们的数据是正确的,或者是否有办法告诉copy命令在空白数据的位置输入NULL 我想我可能必须在空白选项卡中放置,这将作为null

我正在使用copy命令将带有标题的制表符分隔文件的内容复制到postgres中的表中。我以前使用过copy,所以我知道它是如何工作的,但是我有一个问题,关于如何避免文件中丢失的一些数据

我预先制作了表,使其具有与标题中的值相同的列名

我收到的文件中的一些“列”是空白的。我把假数据放进去只是为了让命令正常工作,但这是每周都会自动完成的事情。我想知道我是否需要告诉人们确保他们的数据是正确的,或者是否有办法告诉copy命令在空白数据的位置输入NULL

我想我可能必须在空白选项卡中放置,这将作为null,但我不确定这是否是最好的操作方法。

指定,
null
s的默认值为
\N
。因此,将其改为空的@a_horse_,并没有名称,这是一个好办法

另一种方法是使用任何其他工具对文件进行预处理。我经常在脚本中执行以下操作:


psql dbname通常的方法是拥有一个“哑”且根本不“验证”的暂存表(例如,没有约束,所有列都是
text
)。然后使用
插入到。。选择
将“有效”行从staging表复制到real表。这是我现在采用的方法,只是我手动将“NULL”一词添加到没有任何数据的字段中。我想尝试通过copy命令将其自动化,但我不确定如何或是否可能。文件有数千行长是个问题,因此用“NULL”填充所有缺失的数据手动是不切实际的。因此,看起来只有空白选项卡,其中的数据是空的将是一种方式,我只需让创建文件的人知道这一点,这样我就不必手动将它们添加到自己的文件中。如果您使用
NULL作为“”
(空字符串)会怎么样?非常感谢您的回复,我要试试一匹没有名字的马的建议,看看这是否适合我。是的,我确实考虑过在复制之前做一些处理,我只是想在我开始之前看看有没有更简单的方法。谢谢!