| -- |
| -- Test the environment setting |
| -- |
| |
| -- directory path and dlsuffix are passed to us in environment variables |
| \getenv libdir PG_LIBDIR |
| \getenv dlsuffix PG_DLSUFFIX |
| |
| \set regresslib :libdir '/regress' :dlsuffix |
| |
| CREATE FUNCTION get_environ() |
| RETURNS text[] |
| AS :'regresslib', 'get_environ' |
| LANGUAGE C STRICT; |
| |
| -- fetch the process environment |
| |
| CREATE FUNCTION process_env () RETURNS text[] |
| LANGUAGE plpgsql AS |
| $$ |
| |
| declare |
| res text[]; |
| tmp text[]; |
| f record; |
| begin |
| for f in select unnest(get_environ()) as t loop |
| tmp := regexp_split_to_array(f.t, '='); |
| if array_length(tmp, 1) = 2 then |
| res := res || tmp; |
| end if; |
| end loop; |
| return res; |
| end |
| |
| $$; |
| |
| -- plperl should not be able to affect the process environment |
| |
| DO |
| $$ |
| $ENV{TEST_PLPERL_ENV_FOO} = "shouldfail"; |
| untie %ENV; |
| $ENV{TEST_PLPERL_ENV_FOO} = "testval"; |
| my $penv = spi_exec_query("select unnest(process_env()) as pe"); |
| my %received; |
| for (my $f = 0; $f < $penv->{processed}; $f += 2) |
| { |
| my $k = $penv->{rows}[$f]->{pe}; |
| my $v = $penv->{rows}[$f+1]->{pe}; |
| $received{$k} = $v; |
| } |
| unless (exists $received{TEST_PLPERL_ENV_FOO}) |
| { |
| elog(NOTICE, "environ unaffected") |
| } |
| |
| $$ LANGUAGE plperl; |
| |
| -- clean up to simplify cross-version upgrade testing |
| DROP FUNCTION get_environ(); |