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

How to load 3MB txt file line by line to a column in PostgreSQL?

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

基本上:

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

已编辑

(1) 我的问题被标记为加载csv 格式文件的副本。我需要编辑它。我不认为它是重复的,因为我不能使用 post 中提到的解决方案,而且我的文件不是 csv 格式的文件。简直就是小说而已,我也只需要load data到一栏就可以了

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

(文件先复制一份)

有一种可能

将文件载入 vi

发出转义引号的命令

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

发出在开头插入插入语句的命令

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

发出插入尾随内容的命令

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

写入文件

:w

退出 vi

:q

现在您已经满足了 SQL 的要求。 运行那个

根据 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