我正在尝试将一些测试数据加载到表中,该表的列名为mytext
,列的类型为TEXT
。我有一个文本格式的新颖文件,大小为3MB。我想知道是否有任何简单且正确的方法将字符串逐行加载到列mytext
,而不是从客户端语言的for循环中循环。 (每行每一行)。
基本上:
insert into table (column) values('a line of the text file')
(1)我的问题被标记为与加载csv格式的文件重复。我需要编辑它。我不认为这是重复的,因为我无法使用该文章中提到的解决方案,并且我的文件不是csv格式的文件。这只是一本小说,我也只需要将数据加载到一列。
(2)我只想将新数据加载到列中,然后可以测试一些LIKE,FTS功能。
答案 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