如何将Unix路径下的XML文件内容导入PostgreSQL表单列
解决方案:将Unix路径下的XML文件完整内容导入PostgreSQL单列
前提准备:确保目标表存在
如果还未创建目标表,先执行以下SQL语句:
CREATE TABLE IF NOT EXISTS xml_data ( id SERIAL PRIMARY KEY, value TEXT NOT NULL );
方案1:psql直接插入(适合小文件)
在Unix终端执行以下命令,直接读取XML文件内容并插入到表中,自动处理单引号转义避免SQL语法错误:
psql -d 你的数据库名 -c "INSERT INTO xml_data (value) VALUES ('$(cat /home/bojack/test.xml | sed "s/'/''/g")');"
如果需要指定id为1(如示例所示),可以修改为:
psql -d 你的数据库名 -c "INSERT INTO xml_data (id, value) VALUES (1, '$(cat /home/bojack/test.xml | sed "s/'/''/g")');"
方案2:COPY命令导入(适合大文件,效率更高)
通过管道直接传递数据,无需生成临时文件,同时处理制表符避免字段分隔干扰:
echo -e "1\t$(cat /home/bojack/test.xml | sed -e 's/\t/\\t/g' -e "s/'/''/g")" | psql -d 你的数据库名 -c "COPY xml_data (id, value) FROM STDIN DELIMITER E'\t';"
如果使用自增id,只需传递XML内容即可:
cat /home/bojack/test.xml | sed "s/'/''/g" | psql -d 你的数据库名 -c "COPY xml_data (value) FROM STDIN;"
注意事项
- 替换命令中的
你的数据库名为实际数据库名称 - 确保执行命令的系统用户拥有XML文件的读取权限,以及PostgreSQL数据库的插入权限
- 如果XML文件包含特殊字符(如单引号、制表符),必须通过
sed处理转义,否则会导致SQL执行失败
内容的提问来源于stack exchange,提问作者Mr Peanutbutter
相关产品推荐
相关产品推荐

