variable una resultado procedimientos linea funciones español datos consultas con comandos bases asignar administración postgresql

una - linea de comandos postgresql



PostgreSQL: ¿Cómo pasar parámetros desde la línea de comando? (6)

Descubierto en PostgreSQL, usted puede PREPARE declaraciones tal como lo hace en un lenguaje de scripting. Desafortunadamente, todavía no puedes usar ? , pero puede usar la notación $n .

Usando el ejemplo de arriba:

PREPARE foo(text,text,text) AS SELECT * FROM foobar WHERE foo = $1 AND bar = $2 OR baz = $3 ; EXECUTE foo(''foo'',''bar'',''baz''); DEALLOCATE foo;

Tengo una consulta algo detallada en un script que usa ? marcadores de posición. Quería probar esta misma consulta directamente desde la línea de comando psql (fuera del script). Quiero evitar entrar y reemplazar todo ? con valores reales, en cambio me gustaría pasar los argumentos después de la consulta.

Ejemplo:

SELECT * FROM foobar WHERE foo = ? AND bar = ? OR baz = ? ;

Buscando algo como:

%> {select * from foobar where foo=? and bar=? or baz=? , ''foo'',''bar'',''baz'' };


En psql hay un mecanismo a través de

/set name val

comando, que se supone que está vinculado a la opción de línea de comandos -v name=val . Citar es doloroso, en la mayoría de los casos es más fácil poner toda la carne de la pregunta dentro de un documento de shell.

Editar

Vaya, debería haber dicho -v lugar de -P (que es para las opciones de formato) la respuesta anterior lo hizo bien.


Parece que lo que preguntas no se puede hacer directamente desde la línea de comando . Tendrá que usar una función definida por el usuario en plpgsql o llamar a la consulta desde un lenguaje de scripting (y el último enfoque hace que sea un poco más fácil evitar la inyección de SQL).


Puede construir la cadena de consulta primero usando variables de sistema operativo y luego pasarlo a PSQL de esta manera:

FOO=FOOVALUE BAR=BARVALUE BAZ=BAZVALUE Q1="select * from foobar where foo=${FOOVALUE} and bar=${BARVALUE} or baz=${BAZVALUE};" PSQL [your connection parameters] -c "${Q1}"


Puede usar la construcción -v por ejemplo

psql -v v1=12 -v v2="''Hello World''"

y luego consulte las variables en sql como: v1,: v2, etc.

select * from table_1 where id = :v1;


También puede pasar los parámetros en la línea de comando psql, o desde un archivo por lotes. Las primeras declaraciones recopilan los detalles necesarios para conectarse a su base de datos.

La solicitud final solicita los valores de restricción, que se usarán en la columna IN () de la columna WHERE. Recuerde hacer comillas simples en cadenas y separarlas por comas:

@echo off echo "Test for Passing Params to PGSQL" SET server=localhost SET /P server="Server [%server%]: " SET database=amedatamodel SET /P database="Database [%database%]: " SET port=5432 SET /P port="Port [%port%]: " SET username=postgres SET /P username="Username [%username%]: " SET /P bunos="Enter multiple constraint values for IN clause [%constraints%]: " ECHO you typed %constraints% PAUSE REM pause "C:/Program Files/PostgreSQL/9.0/bin/psql.exe" -h %server% -U %username% -d %database% -p %port% -e -v v1=%constraints% -f test.sql

Ahora en su archivo de código SQL, agregue el token v1 dentro de su cláusula WHERE, o en cualquier otro lugar en el SQL. Tenga en cuenta que los tokens también se pueden usar en una declaración SQL abierta, no solo en un archivo. Guarde esto como test.sql:

SELECT * FROM myTable WHERE NOT someColumn IN (:v1);

En Windows, guarde todo el archivo como un archivo DOS BATch (.bat), guarde el archivo test.sql en el mismo directorio y ejecute el archivo por lotes.

Gracias por Dave Page, de EnterpriseDB, por el guión original solicitado.