如何将3MB txt文件逐行加载到PostgreSQL中的列?

时间:2019-06-23 02:42:30

标签: postgresql psql

我正在尝试将一些测试数据加载到表中,该表的列名为mytext,列的类型为TEXT。我有一个文本格式的新颖文件,大小为3MB。我想知道是否有任何简单且正确的方法将字符串逐行加载到列mytext,而不是从客户端语言的for循环中循环。 (每行每一行)。

基本上:

insert into table (column) values('a line of the text file')

已编辑

(1)我的问题被标记为与加载csv格式的文件重复。我需要编辑它。我不认为这是重复的,因为我无法使用该文章中提到的解决方案,并且我的文件不是csv格式的文件。这只是一本小说,我也只需要将数据加载到一列。

(2)我只想将新数据加载到列中,然后可以测试一些LIKE,FTS功能。

2 个答案:

答案 0 :(得分:3)

(首先复制文件)

有可能

将文件加载到vi

发出命令以转义引号

:1,$s/'/''/g

发出命令以在开始处插入插入语句

:1,$s/^/insert into table values('/

发出命令以插入结尾的内容

:1,$s/$/');/

写入文件

:w

退出vi

:q

现在您具有所需的SQL。运行

答案 1 :(得分:1)

根据Ed Heal的vim回答,MacOS上有一个sed版本:

sed "s/'/''/g" novel.txt > tmp1.sql

sed "s/^/insert into table (column) values('/" tmp1.sql > tmp2.sql

sed "s/$/');/" tmp2.sql > tmp3.sql

rm tmp1.sql tmp2.sql && mv -i tmp3.sql final.sql

psql -U user dbname < final.sql &> /dev/null

要将所有sed模式组合到一行:

sed "s/'/''/g; s/^/insert into table (column) values('/; s/$/');/" novel.txt > final.sql