Sql 用户定义的复合类型文字的语法
我的代码(PostgreSQL 9.2)中有一些UDT(用户定义类型) 并用于:Sql 用户定义的复合类型文字的语法,sql,postgresql,user-defined-types,Sql,Postgresql,User Defined Types,我的代码(PostgreSQL 9.2)中有一些UDT(用户定义类型) 并用于: create or replace function foo( IN _x allvalues_t[] ) returns void as $$ begin... 实际应用中的UDT更加复杂 但我不知道如何输入测试用例。例如,如果我想对产品使用(a,prod-a),(b,prod-b),对地区使用(),那么pgAdmin SQL窗口中的选择*from foo(…)语句会是什么样子?…应该是什么 如果有人能发一篇介
create or replace function foo( IN _x allvalues_t[] ) returns void as $$ begin...
实际应用中的UDT更加复杂
但我不知道如何输入测试用例。例如,如果我想对产品使用(a,prod-a),(b,prod-b)
,对地区使用(),那么pgAdmin SQL窗口中的选择*from foo(…)
语句会是什么样子?…
应该是什么
如果有人能发一篇介绍这种语法的指南或页面,我将不胜感激。我已经看过postgresql手册页,但运气不好。查看手册
您的示例定义了类型allvalues\u t
,但后来使用了allvalues
。还有值\u t
->值\u t
。看起来像是一个简单的打字错误。如果你想把事情做好,就不能那么马虎
for composite的语法可以是以下类型:
SELECT * from foo(('{"(\"(\"\"{arr_a,arr_b}\"\")\",\"(foo,bar)\")","(\"(\"\"{arr_a,arr_b}\"\")\",\"(foo,bar)\")"}'))
你怎样才能了解自己
CREATE TEMP TABLE pairs_t (keyname varchar, e_value varchar);
-- OR CREATE TYPE for a more permanent solution.
INSERT INTO pairs_t VALUES ('foo', 'bar');
CREATE TEMP TABLE values_t (e_values varchar[]);
INSERT INTO values_t VALUES ('{arr_a, arr_b}');
CREATE TEMP TABLE allvalues_t (regions values_t, products pairs_t);
INSERT INTO allvalues_t VALUES((SELECT x FROM values_t x), (SELECT x FROM pairs_t x));
CREATE TEMP TABLE test (t allvalues_t[]);
INSERT INTO test VALUES (ARRAY[(SELECT x FROM allvalues_t x), (SELECT x FROM allvalues_t x)]);
SELECT * FROM test
SELECT x FROM allvalues_t x;
CREATE TEMP TABLE pairs_t (keyname varchar, e_value varchar);
-- OR CREATE TYPE for a more permanent solution.
INSERT INTO pairs_t VALUES ('foo', 'bar');
CREATE TEMP TABLE values_t (e_values varchar[]);
INSERT INTO values_t VALUES ('{arr_a, arr_b}');
CREATE TEMP TABLE allvalues_t (regions values_t, products pairs_t);
INSERT INTO allvalues_t VALUES((SELECT x FROM values_t x), (SELECT x FROM pairs_t x));
CREATE TEMP TABLE test (t allvalues_t[]);
INSERT INTO test VALUES (ARRAY[(SELECT x FROM allvalues_t x), (SELECT x FROM allvalues_t x)]);
SELECT * FROM test
SELECT x FROM allvalues_t x;