Решил. Вот более-менее красивый пример:
##########################################################################
CREATE TYPE sktype AS (f1 varchar, f2 varchar);
CREATE or REPLACE FUNCTION mytime5() returns sktype
AS \'
my %date = ();
my @gm = localtime();
my $year = $gm[5] + 1900;
my $mounth = $gm[4] + 1;
my $mday = $gm[3];
my $hour = $gm[2];
my $min = $gm[1];
my $sec = $gm[0];
$mounth=sprintf("%02d",$mounth);
$mday=sprintf("%02d",$mday);
$hour=sprintf("%02d",$hour);
$min=sprintf("%02d",$min);
$sec=sprintf("%02d",$sec);
$date{\'\'year\'\'}=$year;
$date{\'\'mounth\'\'}=$mounth;
$date{\'\'day\'\'}=$mday;
$date{\'\'hour\'\'}=$hour;
$date{\'\'min\'\'}=$min;
$date{\'\'sec\'\'}=$sec;
return {f1=>"$mday\\-$mounth\\-$year", f2=>"$hour\\:$min\\:$sec"};
\'
LANGUAGE \'plperl\';
##########################################################################
#skif=> select * from mytime5();
#LOG: duration: 0.796 ms statement: select * from mytime5();
# f1 | f2
#------------+----------
# 21-01-2007 | 01:35:07
##########################################################################
#skif=> create table rrr (date varchar, time varchar);
#LOG: duration: 83.407 ms statement: create table rrr (date varchar, time varchar);
#CREATE TABLE
#skif=> select * from rrr;
#LOG: duration: 0.607 ms statement: select * from rrr;
# date | time
#------------+----------
# 21-01-2007 | 01:46:53
#(1 row)
#
#skif=> insert into rrr select * from mytime5();
#LOG: duration: 5.725 ms statement: insert into rrr select * from mytime5();
#INSERT 0 1
#skif=> select * from rrr;
#LOG: duration: 0.474 ms statement: select * from rrr;
# date | time
#------------+----------
# 21-01-2007 | 01:46:53
# 21-01-2007 | 01:47:14
#(2 rows)
#
#skif=> insert into rrr select * from mytime5();
#LOG: duration: 5.735 ms statement: insert into rrr select * from mytime5();
#INSERT 0 1
#skif=> select * from rrr;
#LOG: duration: 0.473 ms statement: select * from rrr;
# date | time
#------------+----------
# 21-01-2007 | 01:46:53
# 21-01-2007 | 01:47:14
# 21-01-2007 | 01:47:19
#(3 rows)
#
#skif=> insert into rrr select * from mytime5() where f1=\'21-01-2007\';
#LOG: duration: 8.186 ms statement: insert into rrr select * from mytime5() where f1=\'21-01-2007\';
#INSERT 0 1
#skif=> select * from rrr;
#LOG: duration: 0.572 ms statement: select * from rrr;
# date | time
#------------+----------
# 21-01-2007 | 01:46:53
# 21-01-2007 | 01:47:14
# 21-01-2007 | 01:47:19
# 21-01-2007 | 01:47:56
#(4 rows)
#
#skif=> insert into rrr select * from mytime5() where f2=\'01:47:56\';
#LOG: duration: 1.603 ms statement: insert into rrr select * from mytime5() where f2=\'01:47:56\';
#INSERT 0 0
#skif=> select * from rrr;
#LOG: duration: 0.479 ms statement: select * from rrr;
# date | time
#------------+----------
# 21-01-2007 | 01:46:53
# 21-01-2007 | 01:47:14
# 21-01-2007 | 01:47:19
# 21-01-2007 | 01:47:56
#(4 rows)
#
#skif=>