PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

jak zwrócić tabelę temp z funkcji postgres?

Tabela tymczasowa

Aby odpowiedzieć na Twoje pytanie w tytule:
Jedno nie można "zwróć tabelę tymczasową z funkcji postgres". Tworzą się tymczasowe tabele i automatycznie widoczne dla tego samego użytkownika w ramach tej samej sesji. Są one automatycznie usuwane na koniec sesji (lub wcześniej).

Funkcja tabeli

Ale funkcja zwracająca zestaw (znana również jako „funkcja tabeli”) może być używana tak samo jak tabela:

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;

Miałoby to sens tylko w przypadku kilku tabel, z których wszystkie mają zakodowane na stałe nazwy kolumn z tym samym typem danych.
Wywołaj (tak jak wybieranie z tabeli):

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

Dlaczego typ danych regclass dla parametru tabeli?
Nazwa tabeli jako parametr funkcji PostgreSQL

Kursor

Dla kompletności:można zwrócić CURSOR , co byłoby bardzo podobne do tego, o co prosisz. Szczegóły w instrukcji tutaj.
Ale rzadko używam kursorów. Funkcje tabeli są przez większość czasu bardziej praktyczne.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy istnieje odpowiednik PostgreSQL profilu SQL Server?

  2. Używanie jsonb_set() do aktualizacji określonej wartości tablicy jsonb

  3. Jak wstawić dane binarne do bazy danych za pomocą Laravel?

  4. Jak przetwarzać transakcje rozproszone w ramach postgresql?

  5. Aplikacja Rails na Heroku nie może pisać do bazy danych PostgreSQL, tylko odczyt