sql >> Base de Datos >  >> RDS >> PostgreSQL

Tabla como argumento de una función de PostgreSQL

No se puede pasar una tabla como tal como parámetro, solo el nombre de la tabla:

CREATE FUNCTION test.fcttest(tbl text) RETURNS SETOF test.out_table AS $$
BEGIN
  EXECUTE format('INSERT INTO test.out_table '
                   'SELECT id, another_field FROM %I', tbl);
  RETURN QUERY EXECUTE format('SELECT id, another_field FROM %I', tbl);
END;
$$ LANGUAGE plpgsql;

Al pasar un nombre de tabla, debe ejecutar un comando dinámico. Solo puede hacer esto en una función plpgsql. El uso del format() función con el %I El modificador protege contra la inyección de SQL. Las filas se devuelven mediante RETURN NEXT QUERY frase, nuevamente con un comando dinámico.

Tenga en cuenta que esta lógica ambas inserta un conjunto de registros en la tabla test.out_table y luego devuelve el mismo conjunto de registros. No estoy seguro de si eso es lo que realmente quieres.