Значение массива может быть создано как литерал или как функция или результат конструктора массива. Вы должны знать:
- Массивы PostgreSQL являются многомерными.
- PostgreSQL поддерживает массив составных типов
- Массивы массивов не поддерживаются.
- Массивы PostgreSQL однородны - могут содержать значения только одного типа.
Так что для ваших целей, вероятно, вам следует создать собственный пользовательский тип, возможно, конструктор для этого пользовательского типа.
CREATE mytype AS(value1 numeric, value2 timestamp);
CREATE OR REPLACE FUNCTION mytype_new(numeric, timestamp)
RETURNS mytype AS $$
SELECT ROW($1, $2)::mytype;
$$ LANGUAGE sql IMMUTABLE;
CREATE OR REPLACE FUNCTION myfunc(a mytype[])
RETURNS void AS $$
DECLARE i mytype;
BEGIN
FOREACH i IN ARRAY a
LOOP
RAISE NOTICE '%', i;
END LOOP;
END;
$$ LANGUAGE plpgsql IMMUTABLE STRICT;
Вы можете создать массив с помощью конструкторов типов:
postgres=# select myfunc(array[mytype_new(1, current_timestamp::timestamp), mytype_new(2, current_timestamp::timestamp)]);
NOTICE: (1,"2018-11-04 05:32:55.579313")
NOTICE: (2,"2018-11-04 05:32:55.579313")
или вы можете ввести значение как литерал (внимание, значения должны быть правильно указаны и экранированы):
postgres=# select myfunc('{"(1,2018-11-04 05:32:28.44918)","(2,2018-11-04 05:32:28.44918)"}');
NOTICE: (1,"2018-11-04 05:32:28.44918")
NOTICE: (2,"2018-11-04 05:32:28.44918")
Эти два последних выбора вы можете запустить из PHP.