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)
答案 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 manual中linestyle
的{{1}}选项。