如何在 PostgreSQL 中使用与另一个复合类型嵌套的复合类型

How to use a composite type nested with another composite type in PostgreSQL

大家晚上好,我试图让一个过程与我创建的类型一起工作,以清理我为执行一些数据持久性而编写的 Java 代码,但是在创建 function 在 PostgreSQL 中,我对如何进行有疑问,在这种情况下该过程调用将如何进行?

CREATE TYPE store AS (
    id INTEGER,
    name VARCHAR(255),
    document VARCHAR(255)
);

CREATE TYPE inventory AS (
    id INTEGER,
    product_id INTEGER,
    store_id INTEGER,
    amount INTEGER,
    price NUMERIC(15,2)
);

CREATE TYPE product AS (
    id INTEGER,
    name VARCHAR(255),
    product_inventory inventory
);

CREATE OR REPLACE FUNCTION products_test(my_store IN store, my_products IN product[])
RETURNS product[] AS $$
BEGIN
    RETURN my_products;
END;
$$ LANGUAGE plpgsql;

SELECT products_test(ARRAY[
    '(1,"tv", INVENTORIES(1, 1, 1, 20, 20.00))',
    '(2,"PC", INVENTORIES(1, 1, 1, 20, 20.00))'
]::products[]);

当我尝试使用上面的 select 子句调用此函数时,出现以下错误:

ERROR:  malformed record literal: " INVENTORIES(1"
LINE 2:  '(1,"tv", INVENTORIES(1, 1, 1, 20, 20.00))',
         ^
DETAIL:  Missing left parenthesis.
SQL state: 22P02
Character: 16

这可能与哪个错误有关?以及如何以正确的形式调用这些嵌套复合类型?

这有效。

testdb=> SELECT products_test('(1,"tv","large")', ARRAY[(1,'tv', (1, 1, 1, 20, 20.00)), (2,'PC', (1, 1, 1, 20, 20.00))]::product[]);
                         products_test
---------------------------------------------------------------
 {"(1,tv,\"(1,1,1,20,20.00)\")","(2,PC,\"(1,1,1,20,20.00)\")"}
(1 row)

事情的变化是

  1. 我避免了 INVENTORIES 并且只使用了括号
  2. products是错误的;应该是 product
  3. 缺少 store 参数