আমি TYPE
পোস্টগ্রিজ এসকিউএলে আবিষ্কার করছি । আমার 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;
আমি অবাক হই যে পোস্টগ্র্রেএসকিউএল দিয়ে এটি সম্ভব, এবং কীভাবে এটি করা যায় তা জিজ্ঞাসা করুন। আপনারা কি জানেন?
আমি যা করার চেষ্টা করছি তার একটি এমডব্লিউই এখানে:
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))
।