temporales tablas procedimientos postgres funciones español desde datos creacion consultas con comandos cero bases aprender administración sql postgresql sql-function

tablas - funciones y procedimientos en postgresql



¿Cómo crear una función temporal en PostgreSQL? (4)

Para los procedimientos de ad hock, los cursors no son tan malos. Sin embargo, son demasiado ineficientes para el uso de productos.

Le permitirán hacer bucles fácilmente en resultados sql en db.

Tengo que ejecutar un bucle en la base de datos. Este es solo un requisito de una vez. Después de ejecutar la función, estoy abandonando la función ahora.

¿Hay algún buen enfoque para crear funciones temporales / desechables?



Un par de notas adicionales al truco inteligente en la respuesta de @ crowmagnumb :

  • La función debe estar calificada para el esquema en todo momento, incluso si pg_temp está en la search_path (como lo hace de manera predeterminada), de acuerdo con Tom Lane para evitar caballos de Troya:

CREATE FUNCTION pg_temp.f_inc(int) RETURNS int AS ''SELECT $1 + 1'' LANGUAGE sql IMMUTABLE; SELECT pg_temp.f_inc(42); f_inc ----- 43

  • Una función creada en el esquema temporal solo es visible dentro de la misma sesión (al igual que las tablas temporales). Es invisible para todas las demás sesiones (incluso para el mismo rol). Puede acceder a la función como un rol diferente en la misma sesión después de SET ROLE .

  • Incluso podría crear un índice funcional basado en esta función "temporal":

    CREATE INDEX foo_idx ON tbl (pg_temp.f_inc(id));

    De este modo, se crea un índice simple utilizando una función temporal en una tabla no temporal. Tal índice sería visible para todas las sesiones pero solo válido para la sesión de creación. El planificador de consultas no usará un índice funcional, donde la expresión no se repite en la consulta. Sigue siendo un sucio truco. Se eliminará automáticamente cuando se cierre la sesión, como un objeto dependiente. Se siente como que esto no debe permitirse en absoluto ...

Si solo necesita ejecutar una función repetidamente y todo lo que necesita es SQL, considere una declaración preparada en su lugar. Actúa de forma muy parecida a una función SQL temporal que muere al final de la sesión. No es lo mismo , sin embargo, y solo se puede usar solo con EXECUTE , no anidado dentro de otra consulta. Ejemplo:

PREPARE upd_tbl AS UPDATE tbl t SET set_name = $2 WHERE tbl_id = $1;

Llamada:

EXECUTE upd_tbl(123, ''foo_name'');

Detalles:


Necesitaba saber cómo usar mucho tiempo en un script que estaba escribiendo. Resulta que puede crear una función temporal usando el esquema pg_temp. Este es un esquema que se crea bajo demanda para su conexión y es donde se almacenan las tablas temporales. Cuando su conexión se cierra o caduca, este esquema se descarta. Resulta que si crea una función en este esquema, el esquema se creará automáticamente. Por lo tanto,

create function pg_temp.testfunc() returns text as $$ select ''hello''::text $$ language sql;

será una función que se mantendrá mientras se mantenga la conexión. No es necesario llamar a un comando de soltar.