使用postgres函数获取集群名称。

0

【以下的问题经过翻译处理】 我知道这可能更像是一个开发类型的问题,但我还是要问。有没有人想出一种可靠的方法来查询函数内的 aurora postgres 集群的集群名称?

我可以将 :'HOST' psql 变量传递给一个函数并获得所需的结果,但我想将其嵌入到函数本身中。

这就是我将它传递给函数的方式 选择 func_name(:'HOST','value2');

我在函数中尝试了类似下面的方法,但它不起作用。它不喜欢变量开头的那个“:”。

select :'HOST' into v_host;;

我已经看到一些自定义扩展可以完成这项工作,但 Aurora PG 不允许这些自定义扩展。

想法?有什么建议吗?

提前致谢!

profile picture
专家
已提问 8 个月前28 查看次数
1 回答
0

【以下的回答经过翻译处理】 1. 为了获取连接到的读取器或写入器实例的名称,您可以使用以下命令:(请注意,您必须使用集群端点进行连接以获取群集名称)

[userr@machine]$ psql -h database-3.cluster-xxxxx.region.rds.amazonaws.com -U postgres -d postgres

postgres=> SELECT :'HOST';

database-3.cluster-xxxxx.region.rds.amazonaws.com

-- 上述输出可以进一步删减为仅包含群集名称

postgres=> SELECT SPLIT_PART(:'HOST','.',1);

database-3

-- 要在函数中使用上述变量,可以使用以下解决方法,因为在psql中 ":" 被视为变量。

postgres=>create table host_name_tab (ht varchar); postgres=> insert into host_name_tab select :'HOST';

postgres=> create or replace function get_host() returns varchar language plpgsql as $$ declare host_name varchar; begin SELECT SPLIT_PART(ht,'.',1) into host_name from host_name_tab ; return host_name; end; $$;

postgres=> select get_host(); get_host

database-3 (1 row)

  1. 如果要获取连接到的实例名称,您可以使用以下命令:

postgres=> select aurora_db_instance_identifier() as host_name; host_name

database-3-instance-1-ap-south-1a (1 row)

请注意,由于这是与开发相关的查询,可以使用不同的逻辑来实现。

profile picture
专家
已回答 8 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则