0

我的代码中有一些 UDT(用户定义的类型)(PostgreSQL 9.2)

create type pairs_t as (keyname varchar, e_value varchar);
create type values_t as (e_values varchar[]);
create type allvalues_t as (regions values_t, products pairs_t);

并用于:

create or replace function foo( IN _x allvalues_t[] ) returns void as $$ begin...

实际应用中的 UDT 更为复杂。

但我不知道如何输入测试用例。例如,如果我想要(a,prod-a),(b,prod-b)产品和 () 区域,那么SELECT * from foo(...)pgAdmin SQL 窗口中的语句会是什么样子?应该...是什么?

如果有人可以发布描述此语法的指南或页面,我将不胜感激。我查看了 postgresql 手册页,但没有运气。

4

1 回答 1

1

CREATE TYPE在手册中查看。

您的示例定义了类型allvalues_t,但稍后使用allvalues。还有values_t-> value_t。看起来像一个简单的错别字。如果你想把事情做好,就不能那么马虎。

复合的语法可以是类型:

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;
于 2013-05-15T02:22:09.033 回答