es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para declarar una variable de matriz bkgws para la tabla gangwei con un subconjunto de nombres de columna col1 y col2, usa el siguiente código:

    DO $$
      DECLARE
        bkgws gangwei[] := ARRAY[ROW('fo1', 'bar1'), ROW('fo2', 'bar2')];
      BEGIN
        INSERT INTO gangwei(config_id, col1, col2)
        SELECT 1, (unnest(bkgws)).col1, (unnest(bkgws)).col2;
      END;
    $$;
    

    En el código anterior, hemos declarado una matriz bkgws de tipo gangwei con todas las columnas incluidas. Podemos usar ROW() para construir valores de fila para el subconjunto de columnas que necesitamos, en este caso col1 y col2. Luego usamos ARRAY[] para construir una matriz de esas filas.

    En la declaración INSERT INTO, usamos la función unnest() para expandir los elementos de la matriz en filas separadas y luego seleccionamos los valores col1 y col2 para cada fila para insertar en la tabla gangwei.

Comments are closed.