首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >psql -(record x字段)-separator NUL

psql -(record x字段)-separator NUL
EN

Stack Overflow用户
提问于 2011-07-28 10:10:18
回答 3查看 1.8K关注 0票数 5

有什么方法可以让psql通过\0 (又名NUL )将字段和记录分开吗?这是将任意数据传递给Bash脚本的唯一方法。

基于马修·伍德的回答,我希望在新初始化的数据库中打印更多的1

代码语言:javascript
复制
declare -i count=0
echo "\pset recordsep '\000'
\f '\000'
select typname from pg_type" | \
sudo -iu postgres psql --no-align --quiet --tuples-only -d dbname -U username | while IFS= read -r -d ''
do
    #echo "$REPLY"
    let count++
done
if [ -n "$REPLY" ]
then
    #echo "$REPLY"
    let count++
fi
echo $count

解决方案:Iff SELECT结果是唯一的,您可以使用此解决方案一次处理一个:

代码语言:javascript
复制
next_record() {
    psql --no-align --quiet --tuples-only -d dbname -U username <<SQL
SELECT colname
  FROM tablename
 WHERE colname > '${1}'
 ORDER BY colname
 LIMIT 1
SQL
}

last_col=
while true
do
    colx="$(next_record "$last_col"; printf x)"
    if [ "$colx" = x ]
    then
        exit
    fi
    col="${colx%$'\nx'}" # The extra \n character is from psql

    # Do your thing here

    col_escaped="${col//"'"/''}" # Double single quotes
    col_escaped="${col_escaped//\\/\\\\}" # Double backslashes
    last_col="$col_escaped"
done
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-30 06:37:40

这是不支持的。psql使用C print函数打印出结果表,而打印零字节在那里不起作用。

Update:现在在PostgreSQL 9.2-to-be (git)中支持这一点。

票数 4
EN

Stack Overflow用户

发布于 2011-07-29 00:08:17

试试这个:

代码语言:javascript
复制
psql --field-separator '\000' --no-align -c '<your query>'

编辑:也许不是。但是,它似乎在psql中使用以下命令工作:

代码语言:javascript
复制
\f '\000'
\a
票数 1
EN

Stack Overflow用户

发布于 2021-05-07 11:36:39

新版本的psql 支持 --field-separator-zero标志。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6857265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档