如何修改PostgreSQL psql输出字段分隔符为逗号(Windows批处理)
问题描述
我在Windows批处理文件中使用Postgres psql执行以下命令:
psql -h %hostip% -p %port% -d %%a -U %username% -t -c "select table_catalog,table_schema,table_name from information_schema.tables" -o out.txt
当前out.txt中数据默认以|作为字段分隔符,格式如下:
mydb | public | table1 mydb | public | table2 mydb | public | table3
我需要将输出改为以逗号分隔的格式:
mydb,public,table1 mydb,public,table2 mydb,public,table3
尝试过使用-F、--field-separator参数但未生效,请问还有什么方法可以修改默认分隔符?
解决方法
方法1:搭配-A与-F参数
单独使用-F参数无效是因为你开启了对齐输出模式,Postgres会用固定宽度和|分隔符格式化内容,忽略字段分隔符设置。需要添加-A参数关闭对齐模式,修改后的命令如下:
psql -h %hostip% -p %port% -d %%a -U %username% -t -A -F "," -c "select table_catalog,table_schema,table_name from information_schema.tables" -o out.txt
-A:禁用对齐输出,切换为紧凑的字段分隔模式-F ",":指定逗号作为字段分隔符
方法2:在SQL查询中直接拼接结果
如果参数设置仍有问题,可以直接在SELECT语句里拼接字段,生成天然的逗号分隔格式:
psql -h %hostip% -p %port% -d %%a -U %username% -t -c "select concat(table_catalog, ',', table_schema, ',', table_name) from information_schema.tables" -o out.txt
若字段值可能包含逗号,建议用quote_literal包裹字段避免格式混乱:
psql -h %hostip% -p %port% -d %%a -U %username% -t -c "select concat_ws(',', quote_literal(table_catalog), quote_literal(table_schema), quote_literal(table_name)) from information_schema.tables" -o out.txt
方法3:用批处理命令替换分隔符
如果不想修改psql命令,可在生成out.txt后,用PowerShell替换掉|及前后空格:
powershell -Command "(Get-Content out.txt) -replace '\s+\|\s+', ',' | Set-Content out.txt"
内容的提问来源于stack exchange,提问作者usersam
相关产品推荐
相关产品推荐

