¿Cómo declarar filas literales con nombres de columna específicos en pl/pgsql?
Quiero declarar una variable de matriz bkgws
para la tabla gangwei
con un subconjunto de nombres de columna col1
y col2
, aquí es lo que intento:
DO $$
DECLARE
bkgws gangwei(col1, col2)[] := {('fo1','bar1'),('fo2','bar2')}; -- aquí, error de sintaxis
BEGIN
INSERT INTO gangwei (config_id, col1, col2) SELECT 1, col1, col2 FROM unnest(bkgws);
END;$$;
Se proporciona que todas las columnas de gangwei
son id, config_id, col1, col2
.
El literal ('fo1','bar1'),('fo2','bar2')
se construye desde la capa de aplicación.
davy.ai
Para declarar una variable de matriz
bkgws
para la tablagangwei
con un subconjunto de nombres de columnacol1
ycol2
, usa el siguiente código:En el código anterior, hemos declarado una matriz
bkgws
de tipogangwei
con todas las columnas incluidas. Podemos usarROW()
para construir valores de fila para el subconjunto de columnas que necesitamos, en este casocol1
ycol2
. Luego usamosARRAY[]
para construir una matriz de esas filas.En la declaración
INSERT INTO
, usamos la funciónunnest()
para expandir los elementos de la matriz en filas separadas y luego seleccionamos los valorescol1
ycol2
para cada fila para insertar en la tablagangwei
.