Estoy usando plpgsql con Postgres 10.6. Tengo una función que declara y da valor a una variable. Esa función también define una vista, y me gustaría usar la variable dentro de la definición.
create view myview as select some_columns from mytable where id = _id /*_id is declared earlier in function */ ; En este caso se puede definir la función, pero al ejecutarla da error: UndefinedColumn: column "_id" does not exist
¿Es tal cosa posible en Postgres? ¿Pueden las vistas incluir variables como parte de su definición?
Veo aquí que en BigQuery (que nunca he usado), lo que pido no es posible, lo que me hace pensar que tampoco puede ser posible en plpgsql.
No es gran cosa, pero tengo curiosidad. Una solución alternativa, y probablemente la solución recomendada, es pasar el _id cuando selecciono desde la vista (por ejemplo, select * from myview where id = 3 ). O, si realmente quiero mantener la llamada de selección simple (lo que hago, porque mi implementación real es más complicada y tiene múltiples variables), podría definir la vista como una cadena y usar execute dentro de la función (esto es todo cosas internas utilizado en la construcción y creación de una base de datos, no en una situación en la que los diversos riesgos inherentes a sql dinámico son una preocupación).
No, no puede pasar una variable a una vista. Pero puedes hacer esto con una función:
create function my_view_function(p_id integer) returns table (id int, column_1 int, column2 text) as $$ select id, column_1, column_2 from my_table where id = p_id; $$ language sql stable;Entonces úsalo así
select * from my_view_function(42);