为什么 psql 在此用户定义的函数中向主机名添加“+”符号

Why does psql add a '+' symbol to the hostname in this user defined function

map=# CREATE OR REPLACE FUNCTION hostname()                                                             
RETURNS varchar(128) AS
$BODY$
return `hostname`;                                                                                
$BODY$
LANGUAGE 'plperlu';
CREATE FUNCTION

map=# select hostname from hostname();                                                                  
     hostname 
    ----------
     topiary +


(1 row)

Perl 的反引号包括结尾的换行符,所以当你说:

my $hostname = `hostname`

你在 $hostname 中得到一个尾随换行符。您在 psql 输出中看到的 + 只是 psql 指示字段中有换行符的方式。

您可能想 chomp 函数内部:

CREATE OR REPLACE FUNCTION hostname()                                                             
RETURNS text AS
$BODY$
    my $hostname = `hostname`;
    chomp($hostname);
    return $hostname;
$BODY$
LANGUAGE 'plperlu';

我还将 return 类型更改为 text,因为不需要包含任意限制,而且您几乎总是希望使用 text 而不是 varchar(n) 与 PostgreSQL .

您可能需要阅读 fine manual\psetlinestyle 选项。