Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

529
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda