Linux下如何从PostgreSQL/MySQL抽取数据增量追加至已有文件/CSV
嘿,我来帮你搞定在Linux环境下把PostgreSQL/MySQL的查询结果追加到已有文件或CSV里的需求,分两种数据库分别说明,完全匹配你给出的示例效果:
PostgreSQL 实现方式
根据你需要的输出格式(带边框的表格或纯CSV),有两种常用方法:
1. 追加为CSV格式(无表头、无格式边框)
如果你的目标文件是标准CSV,我们需要只输出查询结果的数据行,避免重复表头:
# 替换以下参数:用户名、数据库名、目标文件路径 psql -U your_username -d your_dbname -t -A -F ',' -c "select * from tableA;" >> target_file.csv
参数说明:
-t:仅输出数据行,去掉表头和表格边框-A:启用非对齐模式,避免自动填充空格-F ',':指定字段分隔符为逗号,符合CSV标准>>:将结果追加到文件末尾(用>会覆盖原有内容,注意区分)
2. 追加为带边框的表格格式
如果你想保持和示例一致的带边框表格,需要过滤掉查询结果里的表头和分隔线,只追加数据行:
# 替换以下参数:用户名、数据库名、目标文件路径 psql -U your_username -d your_dbname -c "select * from tableA;" | grep -E '^\|.*\|$' >> target_file.txt
解释:grep -E '^\|.*\|$'会只保留以|开头和结尾的行(也就是数据行),自动跳过表头和+开头的分隔线,完美匹配你要的追加效果。
MySQL 实现方式
同样针对两种格式提供解决方案:
1. 追加为CSV格式(无表头、无格式边框)
使用mysql命令行工具的参数控制输出,只追加数据行:
# 替换以下参数:用户名、密码、数据库名、目标文件路径 mysql -u your_username -pyour_password -D your_dbname -s -N -e "select * from tableA;" >> target_file.csv
参数说明:
-s:静默模式,去掉多余的格式输出-N:不输出表头行-e:直接执行指定的SQL语句>>:追加到文件末尾
2. 追加为带边框的表格格式
和PostgreSQL类似,通过过滤只保留数据行:
# 替换以下参数:用户名、密码、数据库名、目标文件路径 mysql -u your_username -pyour_password -D your_dbname -e "select * from tableA;" | grep -E '^\|.*\|$' >> target_file.txt
这条命令会过滤掉查询结果里的表头和分隔线,只把数据行追加到已有表格的末尾,和你给出的示例效果完全一致。
内容的提问来源于stack exchange,提问作者mathews
相关产品推荐
相关产品推荐

