Como obter os registros da tabela psql no shell script?

0

Eu tenho postgresql, em que eu tenho uma tabela com 10 registros, eu quero os 10 registros no script de shell de 10 variáveis locais.

Eu tentei com o seguinte caminho, mas ele irá armazenar todos os registros na lista 123 [0] variável não na lista 123 [1] ... list123 [9].

declare -a list123
list123=( "$(psql -t -h 10.100.0.1 -U prasad statistics -c "select command from jobhandler.config_info where conf_name like '%stager%'")" )

Eu quero cada registro na lista correspondente123 [0-9].

    
por Prasad 01.03.2016 / 12:33

2 respostas

1

Não tenho certeza se estou respondendo sua pergunta. Você quer uma matriz de 10 strings como uma variável local ou 10 variáveis de shell, cada uma contendo uma string?

O último requer um truque estranho:

#!/bin/bash

COUNTER=1
eval $(psql -t -h 10.100.0.1 -U prasad statistics -c "select command from jobhandler.config_info where conf_name like '%stager%'" |
while read VAR
do
    echo "list123$COUNTER='$VAR'"
    ((COUNTER = COUNTER + 1))
done)

echo list1231="$list1231"
echo list1232="$list1232"

Esta variante acaba configurando variáveis shell chamadas "list1231", "list1232", "list1233" ..., ela não define diferentes elementos de uma variável de shell de array chamada "list123"

    
por 01.03.2016 / 15:24
1

O problema é causado pelas aspas duplas que você colocou em torno da substituição do comando $() . Isso transforma toda a saída em uma única string de várias linhas.

Tente:

declare -a list123
list123=( $(psql -t -h 10.100.0.1 -U prasad statistics -c "select command from jobhandler.config_info where conf_name like '%stager%'") )

Eu não tenho sua tabela, mas testei com um id simples, nome, tabela dob no meu sistema:

$ list123=($(psql -t -c 'select dob from newtable'))
$ set | grep list123
list123=([0]="1967-03-07" [1]="1964-08-07" [2]="1992-10-19" [3]="1964-12-18" [4]="1945-12-26")
    
por 01.03.2016 / 22:45