TYPEPostgreSQLで発見しています。私は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))。