2012-09-21 37 views
7

Por ejemplo, tengo un valor de tabla almacena:tienda PostgreSQL resultado de la consulta a Shell o PostgreSQL variables

select * from myvalue; 

    val 
------- 
12345 
(1 row) 

¿Cómo puedo guardar esta 12345 en una variable en PostgreSQL o concha guión?

Esto es lo que he intentado en mi script de shell:

var=$(psql -h host -U user -d db <<SQLSTMT 
SELECT * FROM myvalue; 
SQLSTMT) 

pero echo $var me da:

val ------- 12345 (1 row) 

También he intentado

\set var (select * from myvalue) 

en psql y cuando introduzco \set lista:

var = '(select*frommyvalue)' 

Respuesta

11

No, no, no! Utilizar "datos en bruto" cambio de psql, como "-t" o "\ t" y tubo de la consulta a psql en lugar de analizar tabla ASCII, vamos :-)

echo 'select * from myvalue;' | psql -t -h host -U user -d db 

Si realmente necesita analizar psql salida, también podría usar -H-switch (activa la salida HTML), y analizarlo con algún módulo perl para analizar tablas html, lo utilicé una o dos veces. Además, es posible que desee utilizar un pgpass file y ~/.psqlrc para algunos valores predeterminados , como DB por defecto para conectarse, cuando no se especifica.

+2

Me gusta @ scott-marlowe dijo: -A quita la alineación de salida de la tabla. Agregue ese indicador para una sola salida. –

1

Puede filtrar el resultado que se obtiene con el comando psql:

var=$(psql -h host -U user -d db <<SQLSTMT 
SELECT * FROM myvalue; 
SQLSTMT) 
var=$(cut -d' ' -f3 <<<$var) 
6

psql tiene una opción -c/--command= aceptar SQL desde la línea de comandos, y -t/--tuples-only opción para controlar el formato de salida.

$ psql -c 'select 1+1' 
?column? 
---------- 
     2 
(1 row) 
$ psql -t -c 'select 1+1' 
     2 

$ VALUE=`psql -t -c 'select 1+1'` 
$ echo $VALUE 
2 
1

En this answer explico una forma de hacerlo, usando un proceso conjunto para comunicar de ida y vuelta con psql. Eso es exagerado si todo lo que necesita es ejecutar una consulta y obtener un solo resultado, pero podría ser bueno saber si está usando el shell scripting con psql.

3
var=`psql -Atc "select 1;"` 
echo $var 
1 
Cuestiones relacionadas