如何将 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
我正在尝试将一些测试数据加载到 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