-- =================================================================== -- create test functions -- =================================================================== CREATE FUNCTION initialize_remote_temp_table(cstring, integer) RETURNS bool AS 'pg_shard' LANGUAGE C STRICT; CREATE FUNCTION count_remote_temp_table_rows(cstring, integer) RETURNS integer AS 'pg_shard' LANGUAGE C STRICT; CREATE FUNCTION get_and_purge_connection(cstring, integer) RETURNS bool AS 'pg_shard' LANGUAGE C STRICT; -- =================================================================== -- test connection hash functionality -- =================================================================== -- reduce verbosity to squelch chatty warnings \set VERBOSITY terse -- connect to non-existent host SELECT initialize_remote_temp_table('dummy-host-name', 12345); WARNING: Connection failed to dummy-host-name:12345 initialize_remote_temp_table ------------------------------ f (1 row) \set VERBOSITY default -- try to use hostname over 255 characters SELECT initialize_remote_temp_table(repeat('a', 256)::cstring, :worker_port); ERROR: hostname exceeds the maximum length of 255 -- connect to localhost and build a temp table SELECT initialize_remote_temp_table('localhost', :worker_port); initialize_remote_temp_table ------------------------------ t (1 row) -- table should still be visible since session is reused SELECT count_remote_temp_table_rows('localhost', :worker_port); count_remote_temp_table_rows ------------------------------ 100 (1 row) -- purge existing connection to localhost SELECT get_and_purge_connection('localhost', :worker_port); get_and_purge_connection -------------------------- t (1 row) -- squelch WARNINGs that contain worker_port SET client_min_messages TO ERROR; -- should not be able to see table anymore SELECT count_remote_temp_table_rows('localhost', :worker_port); count_remote_temp_table_rows ------------------------------ -1 (1 row) -- recreate once more SELECT initialize_remote_temp_table('localhost', :worker_port); initialize_remote_temp_table ------------------------------ t (1 row) -- kill backend to disconnect SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE application_name = 'pg_shard'; pg_terminate_backend ---------------------- t (1 row) -- should get connection failure (cached connection bad) SELECT count_remote_temp_table_rows('localhost', :worker_port); count_remote_temp_table_rows ------------------------------ -1 (1 row) -- should get result failure (reconnected, so no temp table) SELECT count_remote_temp_table_rows('localhost', :worker_port); count_remote_temp_table_rows ------------------------------ -1 (1 row) SET client_min_messages TO DEFAULT;