为什么 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 中 \pset
的 linestyle
选项。
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 中 \pset
的 linestyle
选项。