PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

как да върна временна таблица от функцията postgres?

Временна таблица

За да отговоря на въпроса ви в заглавието:
Човек не може "връщане на временна таблица от функцията postgres". Временните таблици са създадени и автоматично се вижда от същия потребител в рамките на същата сесия. Те се премахват автоматично в края на сесията (или по-рано).

Функция на таблицата

Но функция за връщане на набор (известна още като "функция на таблица") може да се използва точно като таблица:

CREATE OR REPLACE FUNCTION getresourceinfo(tablename regclass, opened_path int)
  RETURNS TABLE (pathid int, name varchar, pbs varchar
               , parentid varchar, resid int) AS
$func$ 
BEGIN

RETURN QUERY EXECUTE format(
  'SELECT t.pathid, t.name, t.pbs, t.parentid, t.resid
   FROM  ' || tablename || ' t
   WHERE  t.opened_path = $1'
   )
USING opened_path;

END
$func$ LANGUAGE plpgsql;

Би имало смисъл само за група таблици, които споделят твърдо кодираните имена на колони с един и същ тип данни.
Извикване (точно като избиране от таблица):

SELECT * FROM getresourceinfo(1, 'my_schema.my_tbl')

Защо типът данни regclass за параметъра на таблицата?
Име на таблица като параметър на функция на PostgreSQL

Курсор

За пълнота:Човек може да върне CURSOR , което би било много подобна концепция на това, което питате. Подробности в ръководството тук.
Но почти не използвам курсори. Функциите на таблицата са по-практични през повечето време.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ГРЕШКА:кешираният план не трябва да променя типа резултат при смесване на DDL с SELECT чрез JDBC

  2. Postregsql Разлика в датата на база секунди

  3. Не може да се инсталира plpython за postgres 12

  4. Как да обработвам разпределена транзакция в postgresql?

  5. Общо... с обрат