剥离导入csv数据的第一个空格

时间:2014-05-07 20:40:14

标签: sql postgresql csv

我想将数据导入到postgresql表中。 我有.csv文件格式如下:

1; John Blake
2; Roberto Young
3;Mark Palmer

如何剥离存在的第一个空格的任何解决方案?

我使用了以下代码

\copy users from 'users.csv' using delimiters E';'

它确实保留了空白

2 个答案:

答案 0 :(得分:1)

你无法单独使用COPY来做到这一点。

您可以使用与trim结合的更新:

UPDATE table SET column = trim(from column)

或者在将数据批量插入数据库之前使用脚本清理数据。

答案 1 :(得分:1)

COPY到临时的临时表,INSERT从那里进入目标表,修剪文本列。

CREATE TEMP TABLE tmp_x AS
SELECT * FROM users LIMIT 0;   -- empty temp table with structure of target

\copy tmp_x FROM '/absolute/path/to/file' delimiters E';'; -- psql command (!)

INSERT INTO users
      (usr_id,       usr,  ...) -- list columns
SELECT usr_id, ltrim(usr), ...
FROM   tmp_x;

DROP TABLE tmp_x;  -- optional; is destroyed at end of session automatically

ltrim()仅修剪字符串左侧的空格。

这一系列操作比在COPY之后更新表中的行更好,这需要更长的时间并产生死行。此外,只有这样处理新导入的行。

相关答案:
Delete rows of a table specified in a text file in Postgres