44.3. ÐÑÑÑоеннÑе ÑÑнкÑии #
44.3.1. ÐбÑаÑение к базе даннÑÑ Ð¸Ð· PL/Perl #
ÐбÑаÑаÑÑÑÑ Ðº Ñамой базе даннÑÑ Ð¸Ð· кода Perl можно, иÑполÑзÑÑ ÑледÑÑÑие ÑÑнкÑии:
-
spi_exec_query(query[,пÑедел]) ФÑнкÑиÑ
spi_exec_queryвÑполнÑÐµÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ SQL и возвÑаÑÐ°ÐµÑ Ð²ÐµÑÑ Ð½Ð°Ð±Ð¾Ñ ÑÑÑок в виде ÑÑÑлки на маÑÑив Ñ ÐµÑей. ÐÑлипÑеделзадан и болÑÑе нÑлÑ, Ñоspi_exec_queryполÑÑÐ°ÐµÑ ÑиÑло ÑÑÑок, не пÑевÑÑаÑÑеепÑедел, как еÑли Ð±Ñ Ð·Ð°Ð¿ÑÐ¾Ñ Ð²ÐºÐ»ÑÑал пÑедложениеLIMIT. Ðез ÑказаниÑпÑеделаили когда он Ñавен нÑлÑ, огÑаниÑение на колиÑеÑÑво ÑÑÑок ÑнимаеÑÑÑ.ÐÑÑ ÑÑнкÑÐ¸Ñ ÑледÑÐµÑ Ð¸ÑполÑзоваÑÑ, ÑолÑко еÑли Ð²Ñ Ð·Ð½Ð°ÐµÑе, ÑÑо Ð½Ð°Ð±Ð¾Ñ Ð±ÑÐ´ÐµÑ Ð¾ÑноÑиÑелÑно неболÑÑим. Так вÑглÑÐ´Ð¸Ñ Ð¿ÑÐ¸Ð¼ÐµÑ Ð·Ð°Ð¿ÑоÑа (
SELECT) Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑно заданнÑм макÑималÑнÑм ÑиÑлом ÑÑÑок:$rv = spi_exec_query('SELECT * FROM my_table', 5);ÐÑÐ¾Ñ Ð·Ð°Ð¿ÑÐ¾Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ Ð½Ðµ болÑÑе 5 ÑÑÑок из ÑаблиÑÑ
my_table. ÐÑли вmy_tableеÑÑÑ ÑÑолбеÑmy_column, полÑÑиÑÑ ÐµÐ³Ð¾ знаÑение из ÑÑÑоки$iÑезÑлÑÑаÑа можно ÑледÑÑÑим обÑазом:$foo = $rv->{rows}[$i]->{my_column};ÐбÑее ÑиÑло ÑÑÑок, возвÑаÑÑннÑÑ Ð·Ð°Ð¿ÑоÑом
SELECT, можно полÑÑиÑÑ Ñак:$nrows = $rv->{processed}Так можно вÑполниÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð´ÑÑгого Ñипа:
$query = "INSERT INTO my_table VALUES (1, 'test')"; $rv = spi_exec_query($query);
ÐаÑем можно полÑÑиÑÑ ÑÑаÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ (напÑимеÑ,
SPI_OK_INSERT) ÑледÑÑÑим обÑазом:$res = $rv->{status};ЧÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ ÑиÑло заÑÑонÑÑÑÑ ÑÑÑок, вÑполниÑе:
$nrows = $rv->{processed};ÐолнÑй пÑимеÑ:
CREATE TABLE test ( i int, v varchar ); INSERT INTO test (i, v) VALUES (1, 'first line'); INSERT INTO test (i, v) VALUES (2, 'second line'); INSERT INTO test (i, v) VALUES (3, 'third line'); INSERT INTO test (i, v) VALUES (4, 'immortal'); CREATE OR REPLACE FUNCTION test_munge() RETURNS SETOF test AS $$ my $rv = spi_exec_query('select i, v from test;'); my $status = $rv->{status}; my $nrows = $rv->{processed}; foreach my $rn (0 .. $nrows - 1) { my $row = $rv->{rows}[$rn]; $row->{i} += 200 if defined($row->{i}); $row->{v} =~ tr/A-Za-z/a-zA-Z/ if (defined($row->{v})); return_next($row); } return undef; $$ LANGUAGE plperl; SELECT * FROM test_munge();-
spi_query(команда)
spi_fetchrow(cursor)
spi_cursor_close(cursor) ФÑнкÑии
spi_queryиspi_fetchrowпÑименÑÑÑÑÑ Ð² паÑе, когда Ð½Ð°Ð±Ð¾Ñ ÑÑÑок Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾ÑÐµÐ½Ñ Ð±Ð¾Ð»ÑÑим или когда нÑжно возвÑаÑаÑÑ ÑÑÑоки по меÑе Ð¸Ñ Ð¿Ð¾ÑÑÑплениÑ. ФÑнкÑиÑspi_fetchrowÑабоÑÐ°ÐµÑ ÑолÑко Ñspi_query. СледÑÑÑий пÑÐ¸Ð¼ÐµÑ Ð¿Ð¾ÐºÐ°Ð·ÑваеÑ, как иÑполÑзоваÑÑ Ð¸Ñ Ð²Ð¼ÐµÑÑе:CREATE TYPE foo_type AS (the_num INTEGER, the_text TEXT); CREATE OR REPLACE FUNCTION lotsa_md5 (INTEGER) RETURNS SETOF foo_type AS $$ use Digest::MD5 qw(md5_hex); my $file = '/usr/share/dict/words'; my $t = localtime; elog(NOTICE, "opening file $file at $t" ); open my $fh, '<', $file # здеÑÑ Ð¼Ñ Ð¾Ð±ÑаÑаемÑÑ Ðº ÑайлÑ! or elog(ERROR, "cannot open $file for reading: $!"); my @words = <$fh>; close $fh; $t = localtime; elog(NOTICE, "closed file $file at $t"); chomp(@words); my $row; my $sth = spi_query("SELECT * FROM generate_series(1,$_[0]) AS b(a)"); while (defined ($row = spi_fetchrow($sth))) { return_next({ the_num => $row->{a}, the_text => md5_hex($words[rand @words]) }); } return; $$ LANGUAGE plperlu; SELECT * from lotsa_md5(500);ÐбÑÑно вÑзов
spi_fetchrowнÑжно повÑоÑÑÑÑ, пока не бÑÐ´ÐµÑ Ð¿Ð¾Ð»ÑÑен ÑезÑлÑÑаÑundef, показÑваÑÑий, ÑÑо вÑе ÑÑÑоки Ñже пÑоÑиÑанÑ. ÐÑÑÑоÑ, возвÑаÑаемÑй ÑÑнкÑиейspi_query, авÑомаÑиÑеÑки оÑвобождаеÑÑÑ, когдаspi_fetchrowвозвÑаÑаеÑundef. ÐÑли Ð²Ñ Ð½Ðµ Ñ Ð¾ÑиÑе ÑиÑаÑÑ Ð²Ñе ÑÑÑоки, оÑвободиÑе кÑÑÑоÑ, вÑполнивspi_cursor_close, ÑÑÐ¾Ð±Ñ Ð½Ðµ допÑÑÑиÑÑ ÑÑеÑки памÑÑи.-
spi_prepare(команда,ÑÐ¸Ð¿Ñ Ð°ÑгÑменÑов)
spi_query_prepared(план,аÑгÑменÑÑ)
spi_exec_prepared(план[,аÑÑибÑÑÑ],аÑгÑменÑÑ)
spi_freeplan(план) ФÑнкÑии
spi_prepare,spi_query_prepared,spi_exec_preparedиspi_freeplanÑеализÑÑÑ ÑÑ Ð¶Ðµ ÑÑнкÑионалÑноÑÑÑ, но Ð´Ð»Ñ Ð¿Ð¾Ð´Ð³Ð¾ÑовленнÑÑ Ð·Ð°Ð¿ÑоÑов. ФÑнкÑиÑspi_prepareпÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑÑÑÐ¾ÐºÑ Ð·Ð°Ð¿ÑоÑа Ñ Ð½ÑмеÑованнÑми меÑÑозаполниÑелÑми аÑгÑменÑов ($1, $2 и Ñ. д.) и ÑпиÑок ÑÑÑок Ñ Ñипами аÑгÑменÑов:$plan = spi_prepare('SELECT * FROM test WHERE id > $1 AND name = $2', 'INTEGER', 'TEXT');Ðлан запÑоÑа, подгоÑовленнÑй вÑзовом
spi_prepare, можно иÑполÑзоваÑÑ Ð²Ð¼ÐµÑÑо ÑÑÑоки запÑоÑа либо вspi_exec_prepared, возвÑаÑаÑÑей ÑÐ¾Ñ Ð¶Ðµ ÑезÑлÑÑаÑ, ÑÑо иspi_exec_query, либо вspi_query_prepared, возвÑаÑаÑÑей кÑÑÑÐ¾Ñ Ñак же, какspi_query, коÑоÑÑй заÑем можно пеÑедаÑÑ Ð²spi_fetchrow. РнеобÑзаÑелÑном вÑоÑом паÑамеÑÑеspi_exec_preparedможно пеÑедаÑÑ Ñ ÐµÑ Ñ Ð°ÑÑибÑÑами; в наÑÑоÑÑее вÑÐµÐ¼Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаеÑÑÑ ÑолÑко аÑÑибÑÑlimit, задаÑÑий макÑималÑное ÑиÑло ÑÑÑок, коÑоÑое Ð¼Ð¾Ð¶ÐµÑ Ð²ÐµÑнÑÑÑ Ð·Ð°Ð¿ÑоÑ. Ðез ÑказаниÑlimitили пÑи Ñказании его ÑавнÑм нÑÐ»Ñ Ð¾Ð³ÑаниÑение на колиÑеÑÑво ÑÑÑок ÑнимаеÑÑÑ.ÐодгоÑовленнÑе запÑоÑÑ Ñ Ð¾ÑоÑи Ñем, ÑÑо позволÑÑÑ Ð¸ÑполÑзоваÑÑ ÐµÐ´Ð¸Ð½Ð¾Ð¶Ð´Ñ Ð¿Ð¾Ð´Ð³Ð¾ÑовленнÑй план Ð´Ð»Ñ Ð½ÐµÐ¾Ð´Ð½Ð¾ÐºÑаÑного вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑоÑа. Ðогда план оказÑваеÑÑÑ Ð½Ðµ нÑжен, его можно оÑвободиÑÑ, вÑзвав
spi_freeplan:CREATE OR REPLACE FUNCTION init() RETURNS VOID AS $$ $_SHARED{my_plan} = spi_prepare('SELECT (now() + $1)::date AS now', 'INTERVAL'); $$ LANGUAGE plperl; CREATE OR REPLACE FUNCTION add_time( INTERVAL ) RETURNS TEXT AS $$ return spi_exec_prepared( $_SHARED{my_plan}, $_[0] )->{rows}->[0]->{now}; $$ LANGUAGE plperl; CREATE OR REPLACE FUNCTION done() RETURNS VOID AS $$ spi_freeplan( $_SHARED{my_plan}); undef $_SHARED{my_plan}; $$ LANGUAGE plperl; SELECT init(); SELECT add_time('1 day'), add_time('2 days'), add_time('3 days'); SELECT done(); add_time | add_time | add_time ------------+------------+------------ 2005-12-10 | 2005-12-11 | 2005-12-12ÐамеÑÑÑе, ÑÑо паÑамеÑÑÑ Ð´Ð»Ñ
spi_prepareобознаÑаÑÑÑÑ ÐºÐ°Ðº $1, $2, $3 и Ñ. д., Ñак ÑÑо по возможноÑÑи не запиÑÑвайÑе ÑÑÑоки запÑоÑов в двойнÑÑ ÐºÐ°Ð²ÑÑÐºÐ°Ñ , ÑÑÐ¾Ð±Ñ Ð½Ðµ ÑпÑовоÑиÑоваÑÑ ÑÑÑдноÑловимÑе оÑибки.ÐÑÑ Ð¾Ð´Ð¸Ð½ пÑимеÑ, иллÑÑÑÑиÑÑÑÑий иÑполÑзование необÑзаÑелÑного паÑамеÑÑа
spi_exec_prepared:CREATE TABLE hosts AS SELECT id, ('192.168.1.'||id)::inet AS address FROM generate_series(1,3) AS id; CREATE OR REPLACE FUNCTION init_hosts_query() RETURNS VOID AS $$ $_SHARED{plan} = spi_prepare('SELECT * FROM hosts WHERE address << $1', 'inet'); $$ LANGUAGE plperl; CREATE OR REPLACE FUNCTION query_hosts(inet) RETURNS SETOF hosts AS $$ return spi_exec_prepared( $_SHARED{plan}, {limit => 2}, $_[0] )->{rows}; $$ LANGUAGE plperl; CREATE OR REPLACE FUNCTION release_hosts_query() RETURNS VOID AS $$ spi_freeplan($_SHARED{plan}); undef $_SHARED{plan}; $$ LANGUAGE plperl; SELECT init_hosts_query(); SELECT query_hosts('192.168.1.0/30'); SELECT release_hosts_query(); query_hosts ----------------- (1,192.168.1.1) (2,192.168.1.2) (2 rows)-
spi_commit()
spi_rollback() ÐÑи ÑÑнкÑии ÑикÑиÑÑÑÑ Ð¸Ð»Ð¸ оÑкаÑÑваÑÑ ÑекÑÑÑÑ ÑÑанзакÑиÑ. Ðни могÑÑ Ð²ÑзÑваÑÑÑÑ ÑолÑко в пÑоÑедÑÑÐ°Ñ Ð¸Ð»Ð¸ в анонимнÑÑ Ð±Ð»Ð¾ÐºÐ°Ñ ÐºÐ¾Ð´Ð° (в команде
DO), вÑзÑваемÑÑ Ð¸Ð· кода веÑÑ Ð½ÐµÐ³Ð¾ ÑÑовнÑ. (ÐамеÑÑÑе, ÑÑо вÑполниÑÑ SQL-командÑCOMMITилиROLLBACKÑеÑезspi_exec_queryили подобнÑÑ ÑÑнкÑÐ¸Ñ Ð½ÐµÐ»ÑзÑ. СооÑвеÑÑÑвÑÑÑие опеÑаÑии могÑÑ Ð²ÑполнÑÑÑÑÑ ÑолÑко даннÑми ÑÑнкÑиÑми.) ÐоÑле завеÑÑÐµÐ½Ð¸Ñ Ð¾Ð´Ð½Ð¾Ð¹ ÑÑанзакÑии ÑледÑÑÑÐ°Ñ Ð½Ð°ÑинаеÑÑÑ Ð°Ð²ÑомаÑиÑеÑки, оÑделÑной ÑÑнкÑии Ð´Ð»Ñ ÑÑого неÑ.ÐÑимеÑ:
CREATE PROCEDURE transaction_test1() LANGUAGE plperl AS $$ foreach my $i (0..9) { spi_exec_query("INSERT INTO test1 (a) VALUES ($i)"); if ($i % 2 == 0) { spi_commit(); } else { spi_rollback(); } } $$; CALL transaction_test1();
44.3.2. ÐÑпомогаÑелÑнÑе ÑÑнкÑии в PL/Perl #
-
elog(ÑÑовенÑ,ÑообÑение) ÐÑдаÑÑ ÑлÑжебное ÑообÑение или ÑообÑение об оÑибке. ÐозможнÑе ÑÑовни ÑообÑений:
DEBUG(ÐТÐÐÐÐÐ),LOG(СÐÐÐЩÐÐÐÐ),INFO(ÐÐФÐÐ ÐÐЦÐЯ),NOTICE(ÐÐÐÐЧÐÐÐÐ),WARNING(ÐÐ ÐÐУÐÐ ÐÐÐÐÐÐÐ) иERROR(ÐШÐÐÐÐ). С ÑÑовнемERRORвÑдаÑÑÑÑ Ð¾Ñибка; еÑли она не пеÑÐµÑ Ð²Ð°ÑÑваеÑÑÑ Ð¾ÐºÑÑжаÑÑим кодом Perl, она ÑаÑпÑоÑÑÑанÑеÑÑÑ Ð² вÑзÑваÑÑий запÑоÑ, ÑÑо пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº пÑеÑÑÐ²Ð°Ð½Ð¸Ñ ÑекÑÑей ÑÑанзакÑии или подÑÑанзакÑии. Ðо ÑÑÑи Ñо же Ñамое Ð´ÐµÐ»Ð°ÐµÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°dieÑзÑка Perl. ÐÑи иÑполÑзовании дÑÑÐ³Ð¸Ñ ÑÑовней пÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð¿ÑоÑÑо вÑвод ÑообÑÐµÐ½Ð¸Ñ Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñм ÑÑовнем важноÑÑи. ÐÑдÑÑ Ð»Ð¸ ÑообÑÐµÐ½Ð¸Ñ Ð¾Ð¿ÑеделÑнного ÑÑÐ¾Ð²Ð½Ñ Ð¿ÐµÑедаваÑÑÑÑ ÐºÐ»Ð¸ÐµÐ½ÑÑ Ð¸/или запиÑÑваÑÑÑÑ Ð² жÑÑнал, опÑеделÑеÑÑÑ ÐºÐ¾Ð½ÑигÑÑаÑионнÑми паÑамеÑÑами log_min_messages и client_min_messages. Ðа дополниÑелÑнÑми ÑведениÑми обÑаÑиÑеÑÑ Ðº Ðлаве 18.-
quote_literal(ÑÑÑока) ÐÑоÑмлÑÐµÑ Ð¿ÐµÑеданнÑÑ ÑÑÑÐ¾ÐºÑ Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² каÑеÑÑве ÑекÑÑовой ÑÑÑоки в SQL-опеÑаÑоÑе. ÐклÑÑÑннÑе в Ð½ÐµÑ Ð°Ð¿Ð¾ÑÑÑоÑÑ Ð¸ обÑаÑÐ½Ð°Ñ ÐºÐ¾ÑÐ°Ñ ÑеÑÑа пÑи ÑÑом дÑблиÑÑÑÑÑÑ. ÐамеÑÑÑе, ÑÑо
quote_literalвозвÑаÑÐ°ÐµÑ undef, когда полÑÑÐ°ÐµÑ Ð°ÑгÑÐ¼ÐµÐ½Ñ undef; еÑли Ñакие аÑгÑменÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ, ÑаÑÑо лÑÑÑе иÑполÑзоваÑÑquote_nullable.-
quote_nullable(ÑÑÑока) ÐÑоÑмлÑÐµÑ Ð¿ÐµÑеданнÑÑ ÑÑÑÐ¾ÐºÑ Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² каÑеÑÑве ÑекÑÑовой ÑÑÑоки в SQL-опеÑаÑоÑе; либо, еÑли поÑÑÑÐ¿Ð°ÐµÑ Ð°ÑгÑÐ¼ÐµÐ½Ñ undef, возвÑаÑÐ°ÐµÑ ÑÑÑÐ¾ÐºÑ Â«NULL» (без кавÑÑек). Ð¡Ð¸Ð¼Ð²Ð¾Ð»Ñ Ð°Ð¿Ð¾ÑÑÑÐ¾Ñ Ð¸ обÑаÑÐ½Ð°Ñ ÐºÐ¾ÑÐ°Ñ ÑеÑÑа дÑблиÑÑÑÑÑÑ Ð´Ð¾Ð»Ð¶Ð½Ñм обÑазом.
-
quote_ident(ÑÑÑока) ÐÑоÑмлÑÐµÑ Ð¿ÐµÑеданнÑÑ ÑÑÑÐ¾ÐºÑ Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² каÑеÑÑве иденÑиÑикаÑоÑа в SQL-опеÑаÑоÑе. ÐÑи Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи иденÑиÑикаÑÐ¾Ñ Ð·Ð°ÐºÐ»ÑÑаеÑÑÑ Ð² кавÑÑки (напÑимеÑ, еÑли он ÑодеÑÐ¶Ð¸Ñ ÑимволÑ, недопÑÑÑимÑе в оÑкÑÑÑом виде, или бÑÐºÐ²Ñ Ð² Ñазном ÑегиÑÑÑе). ÐÑли пеÑÐµÐ´Ð°Ð½Ð½Ð°Ñ ÑÑÑока ÑодеÑÐ¶Ð¸Ñ ÐºÐ°Ð²ÑÑки, они дÑблиÑÑÑÑÑÑ.
-
decode_bytea(ÑÑÑока) ÐозвÑаÑÐ°ÐµÑ Ð½ÐµÑоÑмаÑиÑованнÑе двоиÑнÑе даннÑе, пÑедÑÑавленнÑе ÑодеÑжимÑм заданной ÑÑÑоки, коÑоÑÐ°Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° бÑÑÑ Ð·Ð°ÐºÐ¾Ð´Ð¸Ñована как
bytea.-
encode_bytea(ÑÑÑока) ÐозвÑаÑÐ°ÐµÑ Ð·Ð°ÐºÐ¾Ð´Ð¸ÑованнÑе в виде
byteaдвоиÑнÑе даннÑе, ÑодеÑжаÑиеÑÑ Ð² пеÑеданной ÑÑÑоке.-
encode_array_literal(маÑÑив)
encode_array_literal(маÑÑив,ÑазделиÑелÑ) ÐозвÑаÑÐ°ÐµÑ ÑодеÑжимое Ñказанного маÑÑива в виде ÑÑÑоки в ÑоÑмаÑе маÑÑива (Ñм. ÐодÑаздел 8.15.2). ÐозвÑаÑÐ°ÐµÑ Ð·Ð½Ð°Ñение аÑгÑменÑа неизменÑннÑм, еÑли ÑÑо не ÑÑÑлка не маÑÑив. РазделиÑÐµÐ»Ñ ÑлеменÑов в ÑÑÑоке маÑÑива по ÑмолÑÐ°Ð½Ð¸Ñ â «
,» (еÑли ÑазделиÑÐµÐ»Ñ Ð½Ðµ опÑеделÑн или undef).-
encode_typed_literal(знаÑение,имÑ_Ñипа) ÐÑеобÑазÑÐµÑ Ð¿ÐµÑеменнÑÑ Perl в знаÑение Ñипа даннÑÑ , Ñказанного во вÑоÑом аÑгÑменÑе, и возвÑаÑÐ°ÐµÑ ÑÑÑоковое пÑедÑÑавление ÑÑого знаÑениÑ. ÐоÑÑекÑно обÑабаÑÑÐ²Ð°ÐµÑ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñе маÑÑÐ¸Ð²Ñ Ð¸ знаÑÐµÐ½Ð¸Ñ ÑоÑÑавнÑÑ Ñипов.
-
encode_array_constructor(маÑÑив) ÐозвÑаÑÐ°ÐµÑ ÑодеÑжимое пеÑеданного маÑÑива в виде ÑÑÑоки в ÑоÑмаÑе конÑÑÑÑкÑоÑа маÑÑива (Ñм. ÐодÑаздел 4.2.12). ÐÑделÑнÑе знаÑÐµÐ½Ð¸Ñ Ð·Ð°ÐºÐ»ÑÑаÑÑÑÑ Ð² кавÑÑки ÑÑнкÑией
quote_nullable. ÐозвÑаÑÐ°ÐµÑ Ð·Ð½Ð°Ñение аÑгÑменÑа, заклÑÑÑнное в кавÑÑки ÑÑнкÑиейquote_nullable, еÑли аÑгÑÐ¼ÐµÐ½Ñ â не ÑÑÑлка на маÑÑив.-
looks_like_number(ÑÑÑока) ÐозвÑаÑÐ°ÐµÑ Ð·Ð½Ð°Ñение true, еÑли ÑодеÑжимое пеÑеданной ÑÑÑоки Ð¿Ð¾Ñ Ð¾Ð¶Ðµ на ÑиÑло, по пÑавилам Perl, и false в обÑаÑном ÑлÑÑае. ÐозвÑаÑÐ°ÐµÑ undef Ð´Ð»Ñ Ð°ÑгÑменÑа undef. ÐедÑÑие и замÑкаÑÑие пÑÐ¾Ð±ÐµÐ»Ñ Ð¸Ð³Ð½Ð¾ÑиÑÑÑÑÑÑ. СÑÑоки
InfиInfinityÑÑиÑаÑÑÑÑ Ð¿ÑедÑÑавлÑÑÑими ÑиÑло (беÑконеÑноÑÑÑ).-
is_array_ref(аÑгÑменÑ) ÐозвÑаÑÐ°ÐµÑ Ð·Ð½Ð°Ñение true, еÑли пеÑеданнÑй аÑгÑÐ¼ÐµÐ½Ñ Ð¼Ð¾Ð¶Ð½Ð¾ воÑпÑинÑÑÑ ÐºÐ°Ðº ÑÑÑÐ»ÐºÑ Ð½Ð° маÑÑив, Ñо еÑÑÑ ÑÑо ÑÑÑлка на
ARRAYилиPostgreSQL::InServer::ARRAY. РпÑоÑивном ÑлÑÑае возвÑаÑÐ°ÐµÑ false.