gpt4 book ai didi

postgresql - plpgsql 关联数组参数

转载 作者:行者123 更新时间:2023-11-29 14:12:29 26 4
gpt4 key购买 nike

我曾经在邮件列表中读过这个条目 http://archives.postgresql.org/pgsql-hackers/2005-06/msg01481.php

SELECT *
FROM foo_func(
c => current_timestamp::timestamp with time zone,
a => 2,
b => 5
);

现在我需要这种可以将关联数组参数传递给函数的解决方案。我是否需要制作一个虚拟表,然后将该表用作参数类型?或者对此有任何直接的解决方法吗?或者这个 hack 已经实现了吗?

或者我可以使用 pl/python 模拟相同的内容吗?

最佳答案

以下是使用 hstore 和 PG-8.4 for debian 进行回答的步骤。

1) 如果还没有安装,请安装 contrib 包

# apt-get install postgresql-contrib-8.4

2) install hstore in the relevant database

$ psql -U postgres -d dbname# \i /usr/share/postgresql/8.4/contrib/hstore.sql 

2bis) If the plpgsql language is not installed, install it (still inside psql as postgres user)

# CREATE LANGUAGE plpgsql;

3) create the function taking hstore as input. Here's an example in plpgsql that just enumerates the keys and values:

CREATE OR REPLACE function enum_hstore(in_h hstore) returns void
as $$
declare
kv record;
begin
for kv in select * from (select (each(in_h)).*) as f(k,v) loop
raise notice 'key=%,value=%',kv.k,kv.v;
end loop;
end
$$ language plpgsql;

4) 调用函数。由于键和值是文本类型,因此可能需要将非文字条目转换为文本,如问题中的 current_timestamp 调用。示例:

  select enum_hstore(
hstore('c',current_timestamp::text) ||
'a=>2,b=>5'::hstore
);

上述函数的预期结果:

 NOTICE:  key=a,value=2 NOTICE:  key=b,value=5 NOTICE:  key=c,value=2012-04-08 16:12:59.410056+02

关于postgresql - plpgsql 关联数组参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10061124/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com