有人可以帮助我在postgres中实现用户定义的类型吗?
我如何在postgres中复制以下oracle类型的相同功能:
sudo yum install geos geos-devel
Postgres代码如下,其类型为GT_CPT(NomTable)和GT_DATA()。 谁能在这里解释为什么将GT_DATA()类型用作函数?
CREATE TYPE gr_data AS (
col1 numeric, col2 varchar(30)
);
CREATE OR REPLACE TYPE GT_DATA IS TABLE OF GR_DATA;
CREATE OR REPLACE TYPE GT_TEXT IS TABLE OF VARCHAR2(255) INDEX BY BINARY_INTEGER ;
CREATE OR REPLACE TYPE GN_CPT IS TABLE OF NUMBER INDEX BY VARCHAR2(30);
答案 0 :(得分:0)
is table of
通常是在Postgres中使用arrays完成的。
与INDEX BY VARCHAR2(30)
等效的可能是JSONB值(键/值对)或hstore值。在这两种情况下,您都会失去is table of number index by varchar
所提供的类型安全性。
我不清楚您要达到什么目标(尤其是您想如何使用table of number
,但是也许以下内容可以帮助您入门:
create type gr_data as
(
col1 numeric, col2 varchar(30)
);
create or replace function test()
returns void as $body$
declare
NomTable text:= 'tab1';
tes text := 'some value';
result gr_data[];
gt_cpt jsonb := '{}';
begin
-- this assigns 'some value' to the key 'tab1' in the jsonb key/value pair
-- similar to GT_CPT(NomTable) := tes;
gt_cpt := jsonb_set(gt_cpt, array[nomtable], tes);
-- this assigns an empty array to the variable result
-- if I remember correctly that's the same as Oracle's type constructor GT_DATA()
result := array[];
end
$body$
language plpgsql;