我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))
。