Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 用户定义的复合类型文字的语法_Sql_Postgresql_User Defined Types - Fatal编程技术网

Sql 用户定义的复合类型文字的语法

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(…)语句会是什么样子?…应该是什么 如果有人能发一篇介

我的代码(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(…)
语句会是什么样子?
应该是什么

如果有人能发一篇介绍这种语法的指南或页面,我将不胜感激。我已经看过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;