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

时间:2015-02-09 20:03:44

标签: perl postgresql psql

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)

1 个答案:

答案 0 :(得分:3)

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';

我还将返回类型更改为text,因为不需要包含任意限制,而且无论如何,您几乎总是希望使用PostgreSQL text代替varchar(n)

您可能希望阅读fine manuallinestyle的{​​{1}}选项。