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

Върнат тип за функция с array_agg()

Функцията трябва да декларира тип на връщане. Един масив може да се основава само на добре известен тип елемент. Анонимен запис не е разрешен. Така че създайте съставен тип, който отговаря на вашите нужди (освен ако няма таблица или изглед, които вече дефинират типа ред).

CREATE TYPE my_type (
  ts          text
, alertlevel  int
, time_passed interval
);

За целите на тестването можете също да създадете временна таблица, за да регистрирате съставен тип за продължителността на една сесия:

CREATE TEMP TABLE my_type ( ...)

(Временна таблица се изтрива в края на сесията, всяка функция, изградена върху типа, ще бъде повредена след това.)

Използвайте това като основен тип за масива. Можете да използвате проста SQL функция за целта:

CREATE OR REPLACE FUNCTION foo()
  RETURNS my_type[] AS
$func$
SELECT array_agg(result::my_type)  -- you must cast the row type!
FROM  (
   SELECT to_char("Timestamp", 'YYYY-MM-DD HH24:MI:SS')
        , "AlertLevel"
        , "Timestamp" - lag("Timestamp") OVER (ORDER BY "Timestamp")
   FROM   "Judgements"
   WHERE  "SampleID" = sampleid
   AND    "Timestamp" >= starttime
   AND    "Timestamp" <= stoptime
   ) result
WHERE "AlertLevel" > 0;
$func$
LANGUAGE sql;

Обаждане:

SELECT foo();

Проста алтернатива с text[]

Можете също да прехвърлите към text / text[] . Губите имена на колони и информация за тип, но работи веднага:

CREATE OR REPLACE FUNCTION foo()
  RETURNS text[] AS
$func$
SELECT array_agg(result::text)  -- cast the record to text!
FROM  ( ... ) result
...;
$func$
LANGUAGE sql;

Ако всъщност не се нуждаете от масив, можете да изтриете array_agg() , връща отделни редове и декларира типа на връщане с RETURNS TABLE (...) . Търсете SO за ще намерите много примери ..

Не забравяйте да извикате функция за връщане на набор с:

SELECT * FROM foo();



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Импортиране на CSV със запетаи в низови стойности

  2. NВлезте в PostgreSQL връзка

  3. Rails променя типа на колоната и актуализира стойностите на колоната

  4. Сортиране на списък от кортежи, като се има предвид локал (шведски ред)

  5. Подреждане по дата ASC с пролетни данни