TYPE
PostgreSQL에서 발견 하고 있습니다. 나는 TABLE TYPE
어떤 테이블이 존중해야한다고 생각합니다 (인터페이스). 예를 들면 다음과 같습니다.
CREATE TYPE dataset AS(
ChannelId INTEGER
,GranulityIdIn INTEGER
,GranulityId INTEGER
,TimeValue TIMESTAMP
,FloatValue FLOAT
,Status BIGINT
,QualityCodeId INTEGER
,DataArray FLOAT[]
,DataCount BIGINT
,Performance FLOAT
,StepCount INTEGER
,TableRegClass regclass
,Tags TEXT[]
,WeightedMean FLOAT
,MeanData FLOAT
,StdData FLOAT
,MinData FLOAT
,MaxData FLOAT
,MedianData FLOAT
,Percentiles FLOAT[]
);
이 템플릿을 사용하여 테이블을 만들 수 있습니다.
CREATE TABLE test OF dataset;
API 에서 많은 옵션을 보았지만 조금 잃어 버렸습니다. 이 유형을 함수 INPUT/OUTPUT
매개 변수 에 할당 할 수 있는지 알고 싶습니다 .
나는했다고 가정 해 봅시다 FUNCTION
라는 process
데이터 세트에서 레코드의 샘플을받을 수 TABLE
source
을 반환 한 후,이를 처리하고 TABLE
sink
같은과 함께 TYPE
.
즉, 다음과 같은 TYPE
동작 을 만드는 것이 가능한지 알고 싶습니다.
CREATE FUNCTION process(
input dataset
) RETURNS dataset
AS ...
그리고 이것은 다음과 같이 불릴 수 있습니다 :
SELECT
*
FROM
source, process(input := source) AS sink;
PostgreSQL로 가능하다는 것을 궁금해하고 그렇게하는 방법을 묻습니다. 누구 아세요?
내가하려는 일의 MWE는 다음과 같습니다.
DROP TABLE IF EXISTS source;
DROP FUNCTION IF EXISTS process(dataset);
DROP TYPE dataset;
CREATE TYPE dataset AS (
id INTEGER
,t TIMESTAMP
,x FLOAT
);
CREATE TABLE source OF dataset;
ALTER TABLE source ADD PRIMARY KEY(Id);
INSERT INTO source VALUES
(1, '2016-01-01 00:00:00', 10.0)
,(2, '2016-01-01 00:30:00', 11.0)
,(3, '2016-01-01 01:00:00', 12.0)
,(4, '2016-01-01 01:30:00', 9.0)
;
CREATE OR REPLACE FUNCTION process(
_source dataset
)
RETURNS SETOF dataset
AS
$BODY$
SELECT * FROM source;
$BODY$
LANGUAGE SQL;
SELECT * FROM process(source);
그러나 성공하지 못합니다. 소스가 SETOF RECORDS
데이터 세트 유형이 아닌 열로 인식되는 것과 같습니다 .
SELECT
입니다. 내 말은SELECT * FROM process((SELECT * FROM source WHERE cond))
.