मैं 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;
मैंने एपीआई में कई विकल्प देखे हैं , लेकिन मैं थोड़ा खो गया हूं। मैं यह जानना चाहूंगा कि क्या इस प्रकार को कार्य 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))
।