Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

521
Vistas
¿Cómo crear una función de inserción condicional en Postgresql?

Intento escribir una función para insertar algunos valores en column3 de mi tabla en función de los valores dentro de esta tabla, pero no estoy tan familiarizado con la escritura de funciones en Postgresql 9.6.

 --Create some table CREATE TABLE test(column1 INT, column2 INT, column3 TEXT) INSERT INTO test VALUES(-8020,15),(-200,1),(23,115) --Build function CREATE OR REPLACE FUNCTION new_function() RETURNS TEXT AS $$ BEGIN IF test(column1) <= -7000 THEN INSERT INTO test(column3) VALUES('small'); ELSIF test(column1) >= -7000 AND test(column2) <= 15 THEN INSERT INTO test(column3) VALUES('nohello'); ELSIF test(column1) >= -7000 ANDtable(column2) >= 15 THEN INSERT INTO test(column3) VALUES('test'); ELSE INSERT INTO test(column6) VALUES("nodata"); END IF; END; $$ LANGUAGE plpgsql;

El resultado debería ser una tabla que se vea así:

 Column1 | Column2 | Column3 --------------------------- -8020 | 15 | small -200 | 1 | nohello 23 | 115 | test

Al llamar a new_function me sale el error column1 doesn't exist.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Parece que en realidad está buscando una update (que cambia los valores en las filas existentes) en lugar de una insert (que crea nuevas filas).

Pero en resumidas cuentas, sugeriría simplemente usar una columna calculada:

 create table test( column1 int, column2 int, column3 text generated always as ( case when column1 <= -7000 then 'small' when column1 <= 15 then 'nohello' else 'nodata' end ) stored );

Cuando se insertan o actualizan filas en la tabla, la base de datos ajusta automáticamente la columna calculada en consecuencia, por lo que siempre está actualizada.

Demostración en DB Fiddle :

 insert into test(column1, column2) values(-8020,15),(-200,1),(23,115); select * from test;
columna1 | columna2 | columna3
------: | ------: | :------
  -8020 | 15 | pequeña  
   -200 | 1 | hola
     23 | 115 | sin datos 

Tenga en cuenta que las columnas generadas solo están disponibles a partir de Postgres 12. En versiones anteriores, una alternativa es tener solo las dos primeras columnas de la tabla y crear una vista para exponer la tercera columna:

 create view myview as select column1, column2, case when column1 <= -7000 then 'small' when column1 <= 15 then 'nohello' else 'nodata' end as column3 from mytable

Luego puede consultar la vista en lugar de la tabla para mostrar sus datos.

over 4 years ago · Santiago Trujillo Denunciar

0

La respuesta de GMB es la solución perfecta, aunque puede actualizar la tabla usando la expresión condicional CASE como se muestra a continuación

 update test set column3 = case when column1 <= - 7000 then 'small' when (column1 >= - 7000 and column2 <= 15) then 'nohello' when (column1 >= - 7000 and column2 >= 15) then 'test' else 'nodata' end;

Demo

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda