prestogres 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +4 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +20 -0
- data/LICENSE +202 -0
- data/NOTICE +22 -0
- data/README.md +217 -0
- data/Rakefile +13 -0
- data/VERSION +1 -0
- data/bin/prestogres +254 -0
- data/config/pcp.conf.sample +28 -0
- data/config/pgpool.conf +678 -0
- data/config/pool_hba.conf +84 -0
- data/config/pool_passwd +0 -0
- data/config/postgresql.conf +2 -0
- data/ext/.gitignore +6 -0
- data/ext/depend +26 -0
- data/ext/extconf.rb +4 -0
- data/ext/prestogres_config.c +12 -0
- data/pgpool2/.gitignore +36 -0
- data/pgpool2/AUTHORS +4 -0
- data/pgpool2/COPYING +12 -0
- data/pgpool2/ChangeLog +1 -0
- data/pgpool2/INSTALL +1 -0
- data/pgpool2/Makefile.am +159 -0
- data/pgpool2/Makefile.in +1187 -0
- data/pgpool2/NEWS +4960 -0
- data/pgpool2/README +1 -0
- data/pgpool2/README.euc_jp +1 -0
- data/pgpool2/README.online-recovery +62 -0
- data/pgpool2/TODO +103 -0
- data/pgpool2/ac_func_accept_argtypes.m4 +85 -0
- data/pgpool2/aclocal.m4 +1088 -0
- data/pgpool2/c-compiler.m4 +134 -0
- data/pgpool2/c-library.m4 +325 -0
- data/pgpool2/child.c +2097 -0
- data/pgpool2/config.guess +1532 -0
- data/pgpool2/config.h.in +332 -0
- data/pgpool2/config.sub +1640 -0
- data/pgpool2/configure +15752 -0
- data/pgpool2/configure.in +392 -0
- data/pgpool2/depcomp +522 -0
- data/pgpool2/doc/basebackup.sh +17 -0
- data/pgpool2/doc/pgpool-de.html +4220 -0
- data/pgpool2/doc/pgpool-en.html +5738 -0
- data/pgpool2/doc/pgpool-fr.html +4118 -0
- data/pgpool2/doc/pgpool-ja.css +198 -0
- data/pgpool2/doc/pgpool-ja.html +11279 -0
- data/pgpool2/doc/pgpool-zh_cn.html +4445 -0
- data/pgpool2/doc/pgpool.css +280 -0
- data/pgpool2/doc/pgpool_remote_start +13 -0
- data/pgpool2/doc/recovery.conf.sample +117 -0
- data/pgpool2/doc/tutorial-en.html +707 -0
- data/pgpool2/doc/tutorial-ja.html +422 -0
- data/pgpool2/doc/tutorial-memqcache-en.html +325 -0
- data/pgpool2/doc/tutorial-memqcache-ja.html +370 -0
- data/pgpool2/doc/tutorial-memqcache-zh_cn.html +322 -0
- data/pgpool2/doc/tutorial-watchdog-en.html +306 -0
- data/pgpool2/doc/tutorial-watchdog-ja.html +343 -0
- data/pgpool2/doc/tutorial-watchdog-zh_cn.html +301 -0
- data/pgpool2/doc/tutorial-zh_cn.html +537 -0
- data/pgpool2/doc/watchdog.png +0 -0
- data/pgpool2/doc/wd-en.html +236 -0
- data/pgpool2/doc/wd-en.jpg +0 -0
- data/pgpool2/doc/wd-ja.html +219 -0
- data/pgpool2/doc/wd-ja.jpg +0 -0
- data/pgpool2/doc/wd-zh_cn.html +201 -0
- data/pgpool2/doc/where_to_send_queries.odg +0 -0
- data/pgpool2/doc/where_to_send_queries.pdf +0 -0
- data/pgpool2/general.m4 +166 -0
- data/pgpool2/getopt_long.c +200 -0
- data/pgpool2/getopt_long.h +44 -0
- data/pgpool2/install-sh +251 -0
- data/pgpool2/ltmain.sh +8406 -0
- data/pgpool2/m4/libtool.m4 +7360 -0
- data/pgpool2/m4/ltoptions.m4 +368 -0
- data/pgpool2/m4/ltsugar.m4 +123 -0
- data/pgpool2/m4/ltversion.m4 +23 -0
- data/pgpool2/m4/lt~obsolete.m4 +92 -0
- data/pgpool2/main.c +2971 -0
- data/pgpool2/md5.c +444 -0
- data/pgpool2/md5.h +28 -0
- data/pgpool2/missing +360 -0
- data/pgpool2/mkinstalldirs +40 -0
- data/pgpool2/parser/Makefile.am +50 -0
- data/pgpool2/parser/Makefile.in +559 -0
- data/pgpool2/parser/copyfuncs.c +3310 -0
- data/pgpool2/parser/gram.c +39100 -0
- data/pgpool2/parser/gram.h +940 -0
- data/pgpool2/parser/gram.y +13408 -0
- data/pgpool2/parser/gramparse.h +74 -0
- data/pgpool2/parser/keywords.c +32 -0
- data/pgpool2/parser/keywords.h +39 -0
- data/pgpool2/parser/kwlist.h +425 -0
- data/pgpool2/parser/kwlookup.c +88 -0
- data/pgpool2/parser/list.c +1156 -0
- data/pgpool2/parser/makefuncs.c +518 -0
- data/pgpool2/parser/makefuncs.h +83 -0
- data/pgpool2/parser/memnodes.h +79 -0
- data/pgpool2/parser/nodes.c +29 -0
- data/pgpool2/parser/nodes.h +609 -0
- data/pgpool2/parser/outfuncs.c +5790 -0
- data/pgpool2/parser/parsenodes.h +2615 -0
- data/pgpool2/parser/parser.c +262 -0
- data/pgpool2/parser/parser.h +46 -0
- data/pgpool2/parser/pg_class.h +158 -0
- data/pgpool2/parser/pg_config_manual.h +273 -0
- data/pgpool2/parser/pg_list.h +352 -0
- data/pgpool2/parser/pg_trigger.h +147 -0
- data/pgpool2/parser/pg_wchar.h +492 -0
- data/pgpool2/parser/pool_memory.c +342 -0
- data/pgpool2/parser/pool_memory.h +77 -0
- data/pgpool2/parser/pool_parser.h +222 -0
- data/pgpool2/parser/pool_string.c +121 -0
- data/pgpool2/parser/pool_string.h +37 -0
- data/pgpool2/parser/primnodes.h +1280 -0
- data/pgpool2/parser/scan.c +4094 -0
- data/pgpool2/parser/scan.l +1451 -0
- data/pgpool2/parser/scanner.h +120 -0
- data/pgpool2/parser/scansup.c +221 -0
- data/pgpool2/parser/scansup.h +28 -0
- data/pgpool2/parser/snprintf.c +1102 -0
- data/pgpool2/parser/stringinfo.c +294 -0
- data/pgpool2/parser/stringinfo.h +178 -0
- data/pgpool2/parser/value.c +78 -0
- data/pgpool2/parser/value.h +62 -0
- data/pgpool2/parser/wchar.c +2048 -0
- data/pgpool2/pcp.conf.sample +28 -0
- data/pgpool2/pcp/Makefile.am +40 -0
- data/pgpool2/pcp/Makefile.in +771 -0
- data/pgpool2/pcp/libpcp_ext.h +250 -0
- data/pgpool2/pcp/md5.c +444 -0
- data/pgpool2/pcp/md5.h +28 -0
- data/pgpool2/pcp/pcp.c +1652 -0
- data/pgpool2/pcp/pcp.h +61 -0
- data/pgpool2/pcp/pcp_attach_node.c +172 -0
- data/pgpool2/pcp/pcp_detach_node.c +185 -0
- data/pgpool2/pcp/pcp_error.c +87 -0
- data/pgpool2/pcp/pcp_node_count.c +160 -0
- data/pgpool2/pcp/pcp_node_info.c +198 -0
- data/pgpool2/pcp/pcp_pool_status.c +166 -0
- data/pgpool2/pcp/pcp_proc_count.c +166 -0
- data/pgpool2/pcp/pcp_proc_info.c +261 -0
- data/pgpool2/pcp/pcp_promote_node.c +185 -0
- data/pgpool2/pcp/pcp_recovery_node.c +172 -0
- data/pgpool2/pcp/pcp_stop_pgpool.c +179 -0
- data/pgpool2/pcp/pcp_stream.c +385 -0
- data/pgpool2/pcp/pcp_stream.h +52 -0
- data/pgpool2/pcp/pcp_systemdb_info.c +194 -0
- data/pgpool2/pcp/pcp_watchdog_info.c +211 -0
- data/pgpool2/pcp_child.c +1493 -0
- data/pgpool2/pg_md5.c +305 -0
- data/pgpool2/pgpool.8.in +121 -0
- data/pgpool2/pgpool.conf +553 -0
- data/pgpool2/pgpool.conf.sample +666 -0
- data/pgpool2/pgpool.conf.sample-master-slave +665 -0
- data/pgpool2/pgpool.conf.sample-replication +664 -0
- data/pgpool2/pgpool.conf.sample-stream +664 -0
- data/pgpool2/pgpool.spec +264 -0
- data/pgpool2/pgpool_adm/TODO +7 -0
- data/pgpool2/pgpool_adm/pgpool_adm--1.0.sql +85 -0
- data/pgpool2/pgpool_adm/pgpool_adm.c +558 -0
- data/pgpool2/pgpool_adm/pgpool_adm.control +5 -0
- data/pgpool2/pgpool_adm/pgpool_adm.h +46 -0
- data/pgpool2/pgpool_adm/pgpool_adm.sql.in +85 -0
- data/pgpool2/pool.h +655 -0
- data/pgpool2/pool_auth.c +1390 -0
- data/pgpool2/pool_config.c +5007 -0
- data/pgpool2/pool_config.h +284 -0
- data/pgpool2/pool_config.l +3281 -0
- data/pgpool2/pool_config_md5.c +29 -0
- data/pgpool2/pool_connection_pool.c +812 -0
- data/pgpool2/pool_error.c +242 -0
- data/pgpool2/pool_globals.c +27 -0
- data/pgpool2/pool_hba.c +1723 -0
- data/pgpool2/pool_hba.conf.sample +67 -0
- data/pgpool2/pool_ip.c +567 -0
- data/pgpool2/pool_ip.h +65 -0
- data/pgpool2/pool_ipc.h +38 -0
- data/pgpool2/pool_lobj.c +242 -0
- data/pgpool2/pool_lobj.h +32 -0
- data/pgpool2/pool_memqcache.c +3818 -0
- data/pgpool2/pool_memqcache.h +268 -0
- data/pgpool2/pool_params.c +163 -0
- data/pgpool2/pool_passwd.c +249 -0
- data/pgpool2/pool_passwd.h +41 -0
- data/pgpool2/pool_path.c +193 -0
- data/pgpool2/pool_path.h +81 -0
- data/pgpool2/pool_process_context.c +247 -0
- data/pgpool2/pool_process_context.h +62 -0
- data/pgpool2/pool_process_query.c +5001 -0
- data/pgpool2/pool_process_reporting.c +1671 -0
- data/pgpool2/pool_process_reporting.h +44 -0
- data/pgpool2/pool_proto2.c +671 -0
- data/pgpool2/pool_proto_modules.c +3524 -0
- data/pgpool2/pool_proto_modules.h +185 -0
- data/pgpool2/pool_query_cache.c +1020 -0
- data/pgpool2/pool_query_context.c +1871 -0
- data/pgpool2/pool_query_context.h +105 -0
- data/pgpool2/pool_relcache.c +284 -0
- data/pgpool2/pool_relcache.h +78 -0
- data/pgpool2/pool_rewrite_outfuncs.c +9060 -0
- data/pgpool2/pool_rewrite_query.c +715 -0
- data/pgpool2/pool_rewrite_query.h +192 -0
- data/pgpool2/pool_select_walker.c +1150 -0
- data/pgpool2/pool_select_walker.h +68 -0
- data/pgpool2/pool_sema.c +161 -0
- data/pgpool2/pool_session_context.c +952 -0
- data/pgpool2/pool_session_context.h +203 -0
- data/pgpool2/pool_shmem.c +185 -0
- data/pgpool2/pool_signal.c +158 -0
- data/pgpool2/pool_signal.h +61 -0
- data/pgpool2/pool_ssl.c +339 -0
- data/pgpool2/pool_stream.c +962 -0
- data/pgpool2/pool_stream.h +61 -0
- data/pgpool2/pool_system.c +659 -0
- data/pgpool2/pool_timestamp.c +1215 -0
- data/pgpool2/pool_timestamp.h +38 -0
- data/pgpool2/pool_type.h +171 -0
- data/pgpool2/pool_worker_child.c +384 -0
- data/pgpool2/ps_status.c +404 -0
- data/pgpool2/recovery.c +435 -0
- data/pgpool2/redhat/pgpool.conf.sample.patch +52 -0
- data/pgpool2/redhat/pgpool.init +201 -0
- data/pgpool2/redhat/pgpool.sysconfig +7 -0
- data/pgpool2/redhat/rpm_installer/basebackup-replication.sh +53 -0
- data/pgpool2/redhat/rpm_installer/basebackup-stream.sh +55 -0
- data/pgpool2/redhat/rpm_installer/config_for_script +17 -0
- data/pgpool2/redhat/rpm_installer/failover.sh +64 -0
- data/pgpool2/redhat/rpm_installer/getsources.sh +141 -0
- data/pgpool2/redhat/rpm_installer/install.sh +1363 -0
- data/pgpool2/redhat/rpm_installer/pgpool_recovery_pitr +47 -0
- data/pgpool2/redhat/rpm_installer/pgpool_remote_start +15 -0
- data/pgpool2/redhat/rpm_installer/recovery.conf +4 -0
- data/pgpool2/redhat/rpm_installer/uninstall.sh +57 -0
- data/pgpool2/sample/dist_def_pgbench.sql +73 -0
- data/pgpool2/sample/pgpool.pam +3 -0
- data/pgpool2/sample/pgpool_recovery +20 -0
- data/pgpool2/sample/pgpool_recovery_pitr +19 -0
- data/pgpool2/sample/pgpool_remote_start +13 -0
- data/pgpool2/sample/replicate_def_pgbench.sql +18 -0
- data/pgpool2/sql/insert_lock.sql +15 -0
- data/pgpool2/sql/pgpool-recovery/pgpool-recovery.c +280 -0
- data/pgpool2/sql/pgpool-recovery/pgpool-recovery.sql.in +19 -0
- data/pgpool2/sql/pgpool-recovery/pgpool_recovery--1.0.sql +24 -0
- data/pgpool2/sql/pgpool-recovery/pgpool_recovery.control +5 -0
- data/pgpool2/sql/pgpool-recovery/uninstall_pgpool-recovery.sql +3 -0
- data/pgpool2/sql/pgpool-regclass/pgpool-regclass.c +206 -0
- data/pgpool2/sql/pgpool-regclass/pgpool-regclass.sql.in +4 -0
- data/pgpool2/sql/pgpool-regclass/pgpool_regclass--1.0.sql +7 -0
- data/pgpool2/sql/pgpool-regclass/pgpool_regclass.control +5 -0
- data/pgpool2/sql/pgpool-regclass/uninstall_pgpool-regclass.sql +1 -0
- data/pgpool2/sql/system_db.sql +38 -0
- data/pgpool2/strlcpy.c +85 -0
- data/pgpool2/test/C/test_extended.c +98 -0
- data/pgpool2/test/jdbc/.cvsignore +2 -0
- data/pgpool2/test/jdbc/AutoCommitTest.java +45 -0
- data/pgpool2/test/jdbc/BatchTest.java +55 -0
- data/pgpool2/test/jdbc/ColumnTest.java +60 -0
- data/pgpool2/test/jdbc/CreateTempTableTest.java +48 -0
- data/pgpool2/test/jdbc/InsertTest.java +34 -0
- data/pgpool2/test/jdbc/LockTest.java +36 -0
- data/pgpool2/test/jdbc/PgpoolTest.java +75 -0
- data/pgpool2/test/jdbc/README.euc_jp +73 -0
- data/pgpool2/test/jdbc/RunTest.java +83 -0
- data/pgpool2/test/jdbc/SelectTest.java +37 -0
- data/pgpool2/test/jdbc/UpdateTest.java +32 -0
- data/pgpool2/test/jdbc/expected/CreateTempTable +1 -0
- data/pgpool2/test/jdbc/expected/autocommit +10 -0
- data/pgpool2/test/jdbc/expected/batch +1 -0
- data/pgpool2/test/jdbc/expected/column +100 -0
- data/pgpool2/test/jdbc/expected/insert +1 -0
- data/pgpool2/test/jdbc/expected/lock +100 -0
- data/pgpool2/test/jdbc/expected/select +2 -0
- data/pgpool2/test/jdbc/expected/update +1 -0
- data/pgpool2/test/jdbc/pgpool.properties +7 -0
- data/pgpool2/test/jdbc/prepare.sql +54 -0
- data/pgpool2/test/jdbc/run.sh +6 -0
- data/pgpool2/test/parser/.cvsignore +6 -0
- data/pgpool2/test/parser/README +32 -0
- data/pgpool2/test/parser/expected/copy.out +17 -0
- data/pgpool2/test/parser/expected/create.out +64 -0
- data/pgpool2/test/parser/expected/cursor.out +37 -0
- data/pgpool2/test/parser/expected/delete.out +10 -0
- data/pgpool2/test/parser/expected/drop.out +12 -0
- data/pgpool2/test/parser/expected/insert.out +13 -0
- data/pgpool2/test/parser/expected/misc.out +28 -0
- data/pgpool2/test/parser/expected/prepare.out +4 -0
- data/pgpool2/test/parser/expected/privileges.out +31 -0
- data/pgpool2/test/parser/expected/scanner.out +30 -0
- data/pgpool2/test/parser/expected/select.out +89 -0
- data/pgpool2/test/parser/expected/transaction.out +38 -0
- data/pgpool2/test/parser/expected/update.out +11 -0
- data/pgpool2/test/parser/expected/v84.out +37 -0
- data/pgpool2/test/parser/expected/v90.out +25 -0
- data/pgpool2/test/parser/expected/var.out +22 -0
- data/pgpool2/test/parser/input/alter.sql +2 -0
- data/pgpool2/test/parser/input/copy.sql +17 -0
- data/pgpool2/test/parser/input/create.sql +64 -0
- data/pgpool2/test/parser/input/cursor.sql +37 -0
- data/pgpool2/test/parser/input/delete.sql +10 -0
- data/pgpool2/test/parser/input/drop.sql +12 -0
- data/pgpool2/test/parser/input/insert.sql +13 -0
- data/pgpool2/test/parser/input/misc.sql +28 -0
- data/pgpool2/test/parser/input/prepare.sql +4 -0
- data/pgpool2/test/parser/input/privileges.sql +31 -0
- data/pgpool2/test/parser/input/scanner.sql +34 -0
- data/pgpool2/test/parser/input/select.sql +89 -0
- data/pgpool2/test/parser/input/transaction.sql +38 -0
- data/pgpool2/test/parser/input/update.sql +11 -0
- data/pgpool2/test/parser/input/v84.sql +37 -0
- data/pgpool2/test/parser/input/v90.sql +38 -0
- data/pgpool2/test/parser/input/var.sql +22 -0
- data/pgpool2/test/parser/main.c +96 -0
- data/pgpool2/test/parser/parse_schedule +16 -0
- data/pgpool2/test/parser/pool.h +13 -0
- data/pgpool2/test/parser/run-test +62 -0
- data/pgpool2/test/pdo-test/README.euc_jp +58 -0
- data/pgpool2/test/pdo-test/SQLlist/test1.sql +3 -0
- data/pgpool2/test/pdo-test/SQLlist/test2.sql +3 -0
- data/pgpool2/test/pdo-test/collections.inc +11 -0
- data/pgpool2/test/pdo-test/def.inc +7 -0
- data/pgpool2/test/pdo-test/log.txt +0 -0
- data/pgpool2/test/pdo-test/mod/database.inc +36 -0
- data/pgpool2/test/pdo-test/mod/def.inc +0 -0
- data/pgpool2/test/pdo-test/mod/errorhandler.inc +27 -0
- data/pgpool2/test/pdo-test/pdotest.php +11 -0
- data/pgpool2/test/pdo-test/regsql.inc +56 -0
- data/pgpool2/test/pgpool_setup +898 -0
- data/pgpool2/test/regression/README +39 -0
- data/pgpool2/test/regression/clean.sh +21 -0
- data/pgpool2/test/regression/libs.sh +16 -0
- data/pgpool2/test/regression/regress.sh +166 -0
- data/pgpool2/test/regression/tests/001.load_balance/test.sh +128 -0
- data/pgpool2/test/regression/tests/002.native_replication/PgTester.java +47 -0
- data/pgpool2/test/regression/tests/002.native_replication/create.sql +6 -0
- data/pgpool2/test/regression/tests/002.native_replication/test.sh +71 -0
- data/pgpool2/test/regression/tests/003.failover/expected.r +6 -0
- data/pgpool2/test/regression/tests/003.failover/expected.s +6 -0
- data/pgpool2/test/regression/tests/003.failover/test.sh +45 -0
- data/pgpool2/test/regression/tests/004.watchdog/master.conf +12 -0
- data/pgpool2/test/regression/tests/004.watchdog/standby.conf +19 -0
- data/pgpool2/test/regression/tests/004.watchdog/test.sh +52 -0
- data/pgpool2/test/regression/tests/050.bug58/test.sh +50 -0
- data/pgpool2/test/regression/tests/051.bug60/bug.sql +12 -0
- data/pgpool2/test/regression/tests/051.bug60/database-clean.sql +6 -0
- data/pgpool2/test/regression/tests/051.bug60/database-setup.sql +28 -0
- data/pgpool2/test/regression/tests/051.bug60/test.sh +79 -0
- data/pgpool2/test/regression/tests/052.do_query/test.sh +44 -0
- data/pgpool2/test/regression/tests/053.insert_lock_hangs/test.sh +81 -0
- data/pgpool2/test/regression/tests/054.postgres_fdw/test.sh +67 -0
- data/pgpool2/test/regression/tests/055.backend_all_down/test.sh +52 -0
- data/pgpool2/test/regression/tests/056.bug63/jdbctest2.java +66 -0
- data/pgpool2/test/regression/tests/056.bug63/test.sh +47 -0
- data/pgpool2/test/regression/tests/057.bug61/test.sh +40 -0
- data/pgpool2/test/regression/tests/058.bug68/jdbctest3.java +45 -0
- data/pgpool2/test/regression/tests/058.bug68/test.sh +47 -0
- data/pgpool2/test/timestamp/expected/insert.out +16 -0
- data/pgpool2/test/timestamp/expected/misc.out +3 -0
- data/pgpool2/test/timestamp/expected/update.out +6 -0
- data/pgpool2/test/timestamp/input/insert.sql +16 -0
- data/pgpool2/test/timestamp/input/misc.sql +3 -0
- data/pgpool2/test/timestamp/input/update.sql +6 -0
- data/pgpool2/test/timestamp/main.c +129 -0
- data/pgpool2/test/timestamp/parse_schedule +3 -0
- data/pgpool2/test/timestamp/run-test +69 -0
- data/pgpool2/version.h +1 -0
- data/pgpool2/watchdog/Makefile.am +17 -0
- data/pgpool2/watchdog/Makefile.in +505 -0
- data/pgpool2/watchdog/test/stab.c +266 -0
- data/pgpool2/watchdog/test/test.c +85 -0
- data/pgpool2/watchdog/test/wd_child_t.c +87 -0
- data/pgpool2/watchdog/test/wd_lifecheck_t.c +87 -0
- data/pgpool2/watchdog/test/wd_packet_t.c +87 -0
- data/pgpool2/watchdog/test/wd_ping_t.c +20 -0
- data/pgpool2/watchdog/watchdog.c +408 -0
- data/pgpool2/watchdog/watchdog.h +209 -0
- data/pgpool2/watchdog/wd_child.c +444 -0
- data/pgpool2/watchdog/wd_ext.h +123 -0
- data/pgpool2/watchdog/wd_heartbeat.c +577 -0
- data/pgpool2/watchdog/wd_if.c +216 -0
- data/pgpool2/watchdog/wd_init.c +126 -0
- data/pgpool2/watchdog/wd_interlock.c +347 -0
- data/pgpool2/watchdog/wd_lifecheck.c +512 -0
- data/pgpool2/watchdog/wd_list.c +429 -0
- data/pgpool2/watchdog/wd_packet.c +1159 -0
- data/pgpool2/watchdog/wd_ping.c +330 -0
- data/pgpool2/ylwrap +223 -0
- data/pgsql/presto_client.py +346 -0
- data/pgsql/prestogres.py +156 -0
- data/pgsql/setup_functions.sql +21 -0
- data/pgsql/setup_language.sql +3 -0
- data/prestogres.gemspec +23 -0
- metadata +496 -0
data/pgpool2/pgpool.spec
ADDED
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
# How to build RPM:
|
|
2
|
+
# rpmbuild -ba pgpool.spec --define"pgpool_version 3.3.1" --define="pg_version 93" --define="pghome /usr/pgsql-9.3"
|
|
3
|
+
#
|
|
4
|
+
# expecting RPM name are:
|
|
5
|
+
# pgpool-II-pg{xx}-{version}.pgdg.{arch}.rpm
|
|
6
|
+
# pgpool-II-pg{xx}-devel-{version}.pgdg.{arch}.rpm
|
|
7
|
+
# pgpool-II-pg{xx}-{version}.pgdg.src.rpm
|
|
8
|
+
|
|
9
|
+
Summary: Pgpool is a connection pooling/replication server for PostgreSQL
|
|
10
|
+
Name: pgpool-II-pg%{pg_version}
|
|
11
|
+
Version: %{pgpool_version}
|
|
12
|
+
Release: 1%{?dist}
|
|
13
|
+
License: BSD
|
|
14
|
+
Group: Applications/Databases
|
|
15
|
+
Vendor: Pgpool Global Development Group
|
|
16
|
+
URL: http://www.pgppol.net/
|
|
17
|
+
Source0: pgpool-II-%{version}.tar.gz
|
|
18
|
+
Source1: pgpool.init
|
|
19
|
+
Source2: pgpool.sysconfig
|
|
20
|
+
Patch1: pgpool.conf.sample.patch
|
|
21
|
+
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
|
22
|
+
BuildRequires: postgresql%{pg_version}-devel pam-devel
|
|
23
|
+
Obsoletes: postgresql-pgpool
|
|
24
|
+
|
|
25
|
+
# original pgpool archive name
|
|
26
|
+
%define archive_name pgpool-II-%{version}
|
|
27
|
+
|
|
28
|
+
%description
|
|
29
|
+
pgpool-II is a inherited project of pgpool (to classify from
|
|
30
|
+
pgpool-II, it is sometimes called as pgpool-I). For those of
|
|
31
|
+
you not familiar with pgpool-I, it is a multi-functional
|
|
32
|
+
middle ware for PostgreSQL that features connection pooling,
|
|
33
|
+
replication and load balancing functions. pgpool-I allows a
|
|
34
|
+
user to connect at most two PostgreSQL servers for higher
|
|
35
|
+
availability or for higher search performance compared to a
|
|
36
|
+
single PostgreSQL server.
|
|
37
|
+
|
|
38
|
+
pgpool-II, on the other hand, allows multiple PostgreSQL
|
|
39
|
+
servers (DB nodes) to be connected, which enables queries
|
|
40
|
+
to be executed simultaneously on all servers. In other words,
|
|
41
|
+
it enables "parallel query" processing. Also, pgpool-II can
|
|
42
|
+
be started as pgpool-I by changing configuration parameters.
|
|
43
|
+
pgpool-II that is executed in pgpool-I mode enables multiple
|
|
44
|
+
DB nodes to be connected, which was not possible in pgpool-I.
|
|
45
|
+
|
|
46
|
+
%package devel
|
|
47
|
+
Summary: The development files for pgpool-II
|
|
48
|
+
Group: Development/Libraries
|
|
49
|
+
Requires: %{name} = %{version}
|
|
50
|
+
|
|
51
|
+
%description devel
|
|
52
|
+
Development headers and libraries for pgpool-II.
|
|
53
|
+
|
|
54
|
+
%prep
|
|
55
|
+
%setup -q -n %{archive_name}
|
|
56
|
+
%patch1 -p0
|
|
57
|
+
|
|
58
|
+
%build
|
|
59
|
+
%configure --with-pgsql-includedir=%{pghome}/include/ \
|
|
60
|
+
--with-pgsql-lib=%{pghome}/lib \
|
|
61
|
+
--disable-static --with-pam --disable-rpath \
|
|
62
|
+
--sysconfdir=%{_sysconfdir}/%{name}/
|
|
63
|
+
|
|
64
|
+
make %{?_smp_flags}
|
|
65
|
+
|
|
66
|
+
%install
|
|
67
|
+
rm -rf %{buildroot}
|
|
68
|
+
make %{?_smp_flags} DESTDIR=%{buildroot} install
|
|
69
|
+
install -d %{buildroot}%{_datadir}/%{name}
|
|
70
|
+
install -d %{buildroot}%{_sysconfdir}/%{name}
|
|
71
|
+
mv %{buildroot}/%{_sysconfdir}/%{name}/pcp.conf.sample %{buildroot}%{_sysconfdir}/%{name}/pcp.conf
|
|
72
|
+
mv %{buildroot}/%{_sysconfdir}/%{name}/pgpool.conf.sample %{buildroot}%{_sysconfdir}/%{name}/pgpool.conf
|
|
73
|
+
mv %{buildroot}/%{_sysconfdir}/%{name}/pool_hba.conf.sample %{buildroot}%{_sysconfdir}/%{name}/pool_hba.conf
|
|
74
|
+
install -d %{buildroot}%{_initrddir}
|
|
75
|
+
install -m 755 %{SOURCE1} %{buildroot}%{_initrddir}/pgpool
|
|
76
|
+
install -d %{buildroot}%{_sysconfdir}/sysconfig
|
|
77
|
+
install -m 644 %{SOURCE2} %{buildroot}%{_sysconfdir}/sysconfig/pgpool
|
|
78
|
+
|
|
79
|
+
# install to PostgreSQL
|
|
80
|
+
export PATH=%{pghome}/bin:$PATH
|
|
81
|
+
cd sql/pgpool-recovery/
|
|
82
|
+
make %{?_smp_flags} DESTDIR=%{buildroot} install
|
|
83
|
+
cd ../../
|
|
84
|
+
cd sql/pgpool-regclass/
|
|
85
|
+
make %{?_smp_flags} DESTDIR=%{buildroot} install
|
|
86
|
+
cd ../../
|
|
87
|
+
|
|
88
|
+
# nuke libtool archive and static lib
|
|
89
|
+
rm -f %{buildroot}%{_libdir}/libpcp.{a,la}
|
|
90
|
+
|
|
91
|
+
%clean
|
|
92
|
+
rm -rf %{buildroot}
|
|
93
|
+
|
|
94
|
+
%post
|
|
95
|
+
/sbin/ldconfig
|
|
96
|
+
chkconfig --add pgpool
|
|
97
|
+
|
|
98
|
+
%preun
|
|
99
|
+
if [ $1 = 0 ] ; then
|
|
100
|
+
/sbin/service pgpool condstop >/dev/null 2>&1
|
|
101
|
+
chkconfig --del pgpool
|
|
102
|
+
fi
|
|
103
|
+
|
|
104
|
+
%postun -p /sbin/ldconfig
|
|
105
|
+
|
|
106
|
+
%files
|
|
107
|
+
%defattr(-,root,root,-)
|
|
108
|
+
%dir %{_datadir}/%{name}
|
|
109
|
+
%doc README README.euc_jp TODO COPYING INSTALL AUTHORS ChangeLog NEWS doc/pgpool-en.html doc/pgpool-ja.html doc/pgpool.css doc/tutorial-en.html doc/tutorial-ja.html
|
|
110
|
+
%{_bindir}/pgpool
|
|
111
|
+
%{_bindir}/pcp_attach_node
|
|
112
|
+
%{_bindir}/pcp_detach_node
|
|
113
|
+
%{_bindir}/pcp_node_count
|
|
114
|
+
%{_bindir}/pcp_node_info
|
|
115
|
+
%{_bindir}/pcp_pool_status
|
|
116
|
+
%{_bindir}/pcp_proc_count
|
|
117
|
+
%{_bindir}/pcp_proc_info
|
|
118
|
+
%{_bindir}/pcp_promote_node
|
|
119
|
+
%{_bindir}/pcp_stop_pgpool
|
|
120
|
+
%{_bindir}/pcp_recovery_node
|
|
121
|
+
%{_bindir}/pcp_systemdb_info
|
|
122
|
+
%{_bindir}/pcp_watchdog_info
|
|
123
|
+
%{_bindir}/pg_md5
|
|
124
|
+
%{_mandir}/man8/pgpool*
|
|
125
|
+
%{_datadir}/pgpool-II/insert_lock.sql
|
|
126
|
+
%{_datadir}/pgpool-II/system_db.sql
|
|
127
|
+
%{_datadir}/pgpool-II/pgpool.pam
|
|
128
|
+
%{pghome}/share/extension/pgpool-recovery.sql
|
|
129
|
+
%{pghome}/share/extension/pgpool_recovery--1.0.sql
|
|
130
|
+
%{pghome}/share/extension/pgpool_recovery.control
|
|
131
|
+
%{pghome}/share/extension/pgpool-regclass.sql
|
|
132
|
+
%{pghome}/share/extension/pgpool_regclass--1.0.sql
|
|
133
|
+
%{pghome}/share/extension/pgpool_regclass.control
|
|
134
|
+
%{_sysconfdir}/%{name}/pgpool.conf.sample-master-slave
|
|
135
|
+
%{_sysconfdir}/%{name}/pgpool.conf.sample-replication
|
|
136
|
+
%{_sysconfdir}/%{name}/pgpool.conf.sample-stream
|
|
137
|
+
%{_libdir}/libpcp.so.*
|
|
138
|
+
%{pghome}/lib/pgpool-recovery.so
|
|
139
|
+
%{pghome}/lib/pgpool-regclass.so
|
|
140
|
+
%{_initrddir}/pgpool
|
|
141
|
+
%attr(764,root,root) %config(noreplace) %{_sysconfdir}/%{name}/*.conf
|
|
142
|
+
%config(noreplace) %{_sysconfdir}/sysconfig/pgpool
|
|
143
|
+
|
|
144
|
+
%files devel
|
|
145
|
+
%defattr(-,root,root,-)
|
|
146
|
+
%{_includedir}/libpcp_ext.h
|
|
147
|
+
%{_includedir}/pcp.h
|
|
148
|
+
%{_includedir}/pool_process_reporting.h
|
|
149
|
+
%{_includedir}/pool_type.h
|
|
150
|
+
%{_libdir}/libpcp.so
|
|
151
|
+
|
|
152
|
+
%changelog
|
|
153
|
+
* Tue Nov 26 2013 Nozomi Anzai <anzai@sraoss.co.jp> 3.3.1-1
|
|
154
|
+
- Improved to specify the versions of pgool-II and PostgreSQL
|
|
155
|
+
|
|
156
|
+
* Mon May 13 2013 Nozomi Anzai <anzai@sraoss.co.jp> 3.3.0-1
|
|
157
|
+
- Update to 3.3.0
|
|
158
|
+
- Change to install pgpool-recovery, pgpool-regclass to PostgreSQL
|
|
159
|
+
|
|
160
|
+
* Tue Nov 3 2009 Devrim Gunduz <devrim@CommandPrompt.com> 2.2.5-3
|
|
161
|
+
- Remove init script from all runlevels before uninstall. Per #RH Bugzilla
|
|
162
|
+
532177
|
|
163
|
+
|
|
164
|
+
* Mon Oct 5 2009 Devrim Gunduz <devrim@CommandPrompt.com> 2.2.5-2
|
|
165
|
+
- Add 2 new docs, per Tatsuo.
|
|
166
|
+
|
|
167
|
+
* Sun Oct 4 2009 Devrim Gunduz <devrim@CommandPrompt.com> 2.2.5-1
|
|
168
|
+
- Update to 2.2.5, for various fixes described at
|
|
169
|
+
http://lists.pgfoundry.org/pipermail/pgpool-general/2009-October/002188.html
|
|
170
|
+
- Re-apply a fix for Red Hat Bugzilla #442372
|
|
171
|
+
|
|
172
|
+
* Wed Sep 9 2009 Devrim Gunduz <devrim@CommandPrompt.com> 2.2.4-1
|
|
173
|
+
- Update to 2.2.4
|
|
174
|
+
|
|
175
|
+
* Wed May 6 2009 Devrim Gunduz <devrim@CommandPrompt.com> 2.2.2-1
|
|
176
|
+
- Update to 2.2.2
|
|
177
|
+
|
|
178
|
+
* Sun Mar 1 2009 Devrim Gunduz <devrim@CommandPrompt.com> 2.2-1
|
|
179
|
+
- Update to 2.2
|
|
180
|
+
- Fix URL
|
|
181
|
+
- Own /usr/share/pgpool-II directory.
|
|
182
|
+
- Fix pid file path in init script, per pgcore #81.
|
|
183
|
+
- Fix spec file -- we don't use short_name macro in pgcore spec file.
|
|
184
|
+
- Create pgpool pid file directory, per pgcore #81.
|
|
185
|
+
- Fix stop/start routines, also improve init script a bit.
|
|
186
|
+
- Install conf files to a new directory (/etc/pgpool-II), and get rid
|
|
187
|
+
of sample conf files.
|
|
188
|
+
|
|
189
|
+
* Fri Aug 8 2008 Devrim Gunduz <devrim@CommandPrompt.com> 2.1-1
|
|
190
|
+
- Update to 2.1
|
|
191
|
+
- Removed temp patch #4.
|
|
192
|
+
|
|
193
|
+
* Sun Jan 13 2008 Devrim Gunduz <devrim@CommandPrompt.com> 2.0.1-1
|
|
194
|
+
- Update to 2.0.1
|
|
195
|
+
- Add a temp patch that will disappear in 2.0.2
|
|
196
|
+
|
|
197
|
+
* Fri Oct 5 2007 Devrim Gunduz <devrim@CommandPrompt.com> 1.2.1-1
|
|
198
|
+
- Update to 1.2.1
|
|
199
|
+
|
|
200
|
+
* Wed Aug 29 2007 Devrim Gunduz <devrim@CommandPrompt.com> 1.2-5
|
|
201
|
+
- Chmod sysconfig/pgpool to 644, not 755. Per BZ review.
|
|
202
|
+
- Run chkconfig --add pgpool during %%post.
|
|
203
|
+
|
|
204
|
+
* Thu Aug 16 2007 Devrim Gunduz <devrim@CommandPrompt.com> 1.2-4
|
|
205
|
+
- Fixed the directory name where sample conf files and sql files
|
|
206
|
+
are installed.
|
|
207
|
+
|
|
208
|
+
* Sun Aug 5 2007 Devrim Gunduz <devrim@CommandPrompt.com> 1.2-3
|
|
209
|
+
- Added a patch for sample conf file to use Fedora defaults
|
|
210
|
+
|
|
211
|
+
* Sun Aug 5 2007 Devrim Gunduz <devrim@CommandPrompt.com> 1.2-2
|
|
212
|
+
- Added an init script for pgpool
|
|
213
|
+
- Added /etc/sysconfig/pgpool
|
|
214
|
+
|
|
215
|
+
* Wed Aug 1 2007 Devrim Gunduz <devrim@CommandPrompt.com> 1.2-1
|
|
216
|
+
- Update to 1.2
|
|
217
|
+
|
|
218
|
+
* Fri Jun 15 2007 Devrim Gunduz <devrim@CommandPrompt.com> 1.1.1-1
|
|
219
|
+
- Update to 1.1.1
|
|
220
|
+
|
|
221
|
+
* Sat Jun 2 2007 Devrim Gunduz <devrim@CommandPrompt.com> 1.1-1
|
|
222
|
+
- Update to 1.1
|
|
223
|
+
- added --disable-rpath configure parameter.
|
|
224
|
+
- Chowned sample conf files, so that they can work with pgpoolAdmin.
|
|
225
|
+
|
|
226
|
+
* Thu Apr 22 2007 Devrim Gunduz <devrim@CommandPrompt.com> 1.0.2-4
|
|
227
|
+
- Added postgresql-devel as BR, per bugzilla review.
|
|
228
|
+
- Added --disable-static flan, per bugzilla review.
|
|
229
|
+
- Removed superfluous manual file installs, per bugzilla review.
|
|
230
|
+
|
|
231
|
+
* Thu Apr 22 2007 Devrim Gunduz <devrim@CommandPrompt.com> 1.0.2-3
|
|
232
|
+
- Rebuilt for the correct tarball
|
|
233
|
+
- Fixed man8 file ownership, per bugzilla review #229321
|
|
234
|
+
|
|
235
|
+
* Tue Feb 20 2007 Jarod Wilson <jwilson@redhat.com> 1.0.2-2
|
|
236
|
+
- Create proper devel package, drop -libs package
|
|
237
|
+
- Nuke rpath
|
|
238
|
+
- Don't install libtool archive and static lib
|
|
239
|
+
- Clean up %%configure line
|
|
240
|
+
- Use proper %%_smp_mflags
|
|
241
|
+
- Install config files properly, without .sample on the end
|
|
242
|
+
- Preserve timestamps on header files
|
|
243
|
+
|
|
244
|
+
* Tue Feb 20 2007 Devrim Gunduz <devrim@commandprompt.com> 1.0.2-1
|
|
245
|
+
- Update to 1.0.2-1
|
|
246
|
+
|
|
247
|
+
* Mon Oct 02 2006 Devrim Gunduz <devrim@commandprompt.com> 1.0.1-5
|
|
248
|
+
- Rebuilt
|
|
249
|
+
|
|
250
|
+
* Mon Oct 02 2006 Devrim Gunduz <devrim@commandprompt.com> 1.0.1-4
|
|
251
|
+
- Added -libs and RPM
|
|
252
|
+
- Fix .so link problem
|
|
253
|
+
- Cosmetic changes to spec file
|
|
254
|
+
|
|
255
|
+
* Thu Sep 27 2006 - Devrim GUNDUZ <devrim@commandprompt.com> 1.0.1-3
|
|
256
|
+
- Fix spec, per Yoshiyuki Asaba
|
|
257
|
+
|
|
258
|
+
* Thu Sep 26 2006 - Devrim GUNDUZ <devrim@commandprompt.com> 1.0.1-2
|
|
259
|
+
- Fixed rpmlint errors
|
|
260
|
+
- Fixed download url
|
|
261
|
+
- Added ldconfig for .so files
|
|
262
|
+
|
|
263
|
+
* Thu Sep 21 2006 - David Fetter <david@fetter.org> 1.0.1-1
|
|
264
|
+
- Initial build pgpool-II 1.0.1 for PgPool Global Development Group
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/* contrib/pgpool_adm/pgpool_adm--1.0.sql */
|
|
2
|
+
|
|
3
|
+
/* ***********************************************
|
|
4
|
+
* Administrative functions for pgPool
|
|
5
|
+
* *********************************************** */
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* input parameters: node_id, host, timeout, port, username, password
|
|
9
|
+
*/
|
|
10
|
+
CREATE FUNCTION pcp_node_info(integer, text, integer, integer, text, text, OUT host text, OUT port integer, OUT status text, OUT weight float4)
|
|
11
|
+
RETURNS record
|
|
12
|
+
AS 'MODULE_PATHNAME', '_pcp_node_info'
|
|
13
|
+
LANGUAGE C VOLATILE STRICT;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* input parameters: node_id, server_name
|
|
17
|
+
*/
|
|
18
|
+
CREATE FUNCTION pcp_node_info(integer, text, OUT host text, OUT port integer, OUT status text, OUT weight float4)
|
|
19
|
+
RETURNS record
|
|
20
|
+
AS 'MODULE_PATHNAME', '_pcp_node_info'
|
|
21
|
+
LANGUAGE C VOLATILE STRICT;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* input parameters: host, timeout, port, username, password
|
|
25
|
+
*/
|
|
26
|
+
CREATE FUNCTION pcp_pool_status(text, integer, integer, text, text, OUT item text, OUT value text, OUT description text)
|
|
27
|
+
RETURNS record
|
|
28
|
+
AS 'MODULE_PATHNAME', '_pcp_pool_status'
|
|
29
|
+
LANGUAGE C VOLATILE STRICT;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* input parameters: server_name
|
|
33
|
+
*/
|
|
34
|
+
CREATE FUNCTION pcp_pool_status(text, OUT item text, OUT value text, OUT description text)
|
|
35
|
+
RETURNS record
|
|
36
|
+
AS 'MODULE_PATHNAME', '_pcp_pool_status'
|
|
37
|
+
LANGUAGE C VOLATILE STRICT;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* input parameters: host, timeout, port, username, password
|
|
41
|
+
*/
|
|
42
|
+
CREATE FUNCTION pcp_node_count(text, integer, integer, text, text, OUT node_count integer)
|
|
43
|
+
RETURNS integer
|
|
44
|
+
AS 'MODULE_PATHNAME', '_pcp_node_count'
|
|
45
|
+
LANGUAGE C VOLATILE STRICT;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* input parameters: server_name
|
|
49
|
+
*/
|
|
50
|
+
CREATE FUNCTION pcp_node_count(text, OUT node_count integer)
|
|
51
|
+
RETURNS integer
|
|
52
|
+
AS 'MODULE_PATHNAME', '_pcp_node_count'
|
|
53
|
+
LANGUAGE C VOLATILE STRICT;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* input parameters: node_id, host, timeout, port, username, password
|
|
57
|
+
*/
|
|
58
|
+
CREATE FUNCTION pcp_attach_node(integer, text, integer, integer, text, text, OUT node_attached boolean)
|
|
59
|
+
RETURNS boolean
|
|
60
|
+
AS 'MODULE_PATHNAME', '_pcp_attach_node'
|
|
61
|
+
LANGUAGE C VOLATILE STRICT;
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* input parameters: node_id, server_name
|
|
65
|
+
*/
|
|
66
|
+
CREATE FUNCTION pcp_attach_node(integer, text, OUT node_attached boolean)
|
|
67
|
+
RETURNS boolean
|
|
68
|
+
AS 'MODULE_PATHNAME', '_pcp_attach_node'
|
|
69
|
+
LANGUAGE C VOLATILE STRICT;
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* input parameters: node_id, gracefully, host, timeout, port, username, password
|
|
73
|
+
*/
|
|
74
|
+
CREATE FUNCTION pcp_detach_node(integer, boolean, text, integer, integer, text, text, OUT node_detached boolean)
|
|
75
|
+
RETURNS boolean
|
|
76
|
+
AS 'MODULE_PATHNAME', '_pcp_detach_node'
|
|
77
|
+
LANGUAGE C VOLATILE STRICT;
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* input parameters: node_id, gracefully, server_name
|
|
81
|
+
*/
|
|
82
|
+
CREATE FUNCTION pcp_detach_node(integer, boolean, text, OUT node_detached boolean)
|
|
83
|
+
RETURNS boolean
|
|
84
|
+
AS 'MODULE_PATHNAME', '_pcp_detach_node'
|
|
85
|
+
LANGUAGE C VOLATILE STRICT;
|
|
@@ -0,0 +1,558 @@
|
|
|
1
|
+
/*-------------------------------------------------------------------------
|
|
2
|
+
*
|
|
3
|
+
* pgpool_adm.c
|
|
4
|
+
*
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) 2002-2011, PostgreSQL Global Development Group
|
|
7
|
+
*
|
|
8
|
+
* Author: Jehan-Guillaume (ioguix) de Rorthais <jgdr@dalibo.com>
|
|
9
|
+
*
|
|
10
|
+
* IDENTIFICATION
|
|
11
|
+
* contrib/pgpool_adm/pgpool_adm.c
|
|
12
|
+
*
|
|
13
|
+
*-------------------------------------------------------------------------
|
|
14
|
+
*/
|
|
15
|
+
#include "postgres.h"
|
|
16
|
+
#include "miscadmin.h"
|
|
17
|
+
#include "utils/builtins.h"
|
|
18
|
+
#include "foreign/foreign.h"
|
|
19
|
+
#include "nodes/pg_list.h"
|
|
20
|
+
|
|
21
|
+
#include <unistd.h>
|
|
22
|
+
|
|
23
|
+
#include "catalog/pg_type.h"
|
|
24
|
+
#include "funcapi.h"
|
|
25
|
+
#include "libpcp_ext.h"
|
|
26
|
+
#include "pgpool_adm.h"
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Init a pcp_conninfo struct with empty values
|
|
30
|
+
* pcp_conninfo: pcpConninfo structure to intialize
|
|
31
|
+
*/
|
|
32
|
+
void
|
|
33
|
+
init_pcp_conninfo(pcpConninfo * pcp_conninfo)
|
|
34
|
+
{
|
|
35
|
+
pcp_conninfo->host = NULL;
|
|
36
|
+
pcp_conninfo->timeout = -1;
|
|
37
|
+
pcp_conninfo->port = -1;
|
|
38
|
+
pcp_conninfo->user = NULL;
|
|
39
|
+
pcp_conninfo->pass = NULL;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Checks the give pcp_conninfo has valid properties
|
|
44
|
+
* pcp_conninfo: pcpConninfo structure to check
|
|
45
|
+
*
|
|
46
|
+
* exit the function call on error !
|
|
47
|
+
*/
|
|
48
|
+
void
|
|
49
|
+
check_pcp_conninfo_props(pcpConninfo * pcp_conninfo)
|
|
50
|
+
{
|
|
51
|
+
if (pcp_conninfo->timeout < 0)
|
|
52
|
+
ereport(ERROR, (0, errmsg("Timeout is out of range.")));
|
|
53
|
+
|
|
54
|
+
if (pcp_conninfo->port < 0 || pcp_conninfo->port > 65535)
|
|
55
|
+
ereport(ERROR, (0, errmsg("PCP port out of range.")));
|
|
56
|
+
|
|
57
|
+
if (! pcp_conninfo->user)
|
|
58
|
+
ereport(ERROR, (0, errmsg("No user given.")));
|
|
59
|
+
|
|
60
|
+
if (! pcp_conninfo->pass)
|
|
61
|
+
ereport(ERROR, (0, errmsg("No password given.")));
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Wrapper around pcp_connect
|
|
66
|
+
* pcp_conninfo: pcpConninfo structure having pcp connection properties
|
|
67
|
+
*/
|
|
68
|
+
int
|
|
69
|
+
pcp_connect_conninfo(pcpConninfo * pcp_conninfo)
|
|
70
|
+
{
|
|
71
|
+
pcp_set_timeout(pcp_conninfo->timeout);
|
|
72
|
+
|
|
73
|
+
if (pcp_connect(pcp_conninfo->host, pcp_conninfo->port, pcp_conninfo->user, pcp_conninfo->pass))
|
|
74
|
+
{
|
|
75
|
+
return -1;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return 0;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Returns a pcpConninfo structure filled from a foreign server
|
|
83
|
+
* name: the name of the foreign server
|
|
84
|
+
*/
|
|
85
|
+
pcpConninfo
|
|
86
|
+
get_pcp_conninfo_from_foreign_server(char * name)
|
|
87
|
+
{
|
|
88
|
+
Oid userid = GetUserId();
|
|
89
|
+
pcpConninfo pcp_conninfo;
|
|
90
|
+
/* raise an error if given foreign server doesn't exists */
|
|
91
|
+
ForeignServer * foreign_server = GetForeignServerByName(name, false);
|
|
92
|
+
UserMapping * user_mapping;
|
|
93
|
+
ListCell * cell;
|
|
94
|
+
|
|
95
|
+
init_pcp_conninfo(&pcp_conninfo);
|
|
96
|
+
|
|
97
|
+
/* raise an error if the current user isn't mapped with the given foreign server */
|
|
98
|
+
user_mapping = GetUserMapping(userid, foreign_server->serverid);
|
|
99
|
+
|
|
100
|
+
foreach(cell, foreign_server->options)
|
|
101
|
+
{
|
|
102
|
+
DefElem * def = lfirst(cell);
|
|
103
|
+
|
|
104
|
+
if (strcmp(def->defname, "host") == 0)
|
|
105
|
+
{
|
|
106
|
+
pcp_conninfo.host = pstrdup(strVal(def->arg));
|
|
107
|
+
}
|
|
108
|
+
else if (strcmp(def->defname, "port") == 0)
|
|
109
|
+
{
|
|
110
|
+
pcp_conninfo.port = atoi(strVal(def->arg));
|
|
111
|
+
}
|
|
112
|
+
else if (strcmp(def->defname, "timeout") == 0)
|
|
113
|
+
{
|
|
114
|
+
pcp_conninfo.timeout = atoi(strVal(def->arg));
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
foreach(cell, user_mapping->options)
|
|
119
|
+
{
|
|
120
|
+
DefElem * def = lfirst(cell);
|
|
121
|
+
|
|
122
|
+
if (strcmp(def->defname, "user") == 0)
|
|
123
|
+
{
|
|
124
|
+
pcp_conninfo.user = pstrdup(strVal(def->arg));
|
|
125
|
+
}
|
|
126
|
+
else if (strcmp(def->defname, "password") == 0)
|
|
127
|
+
{
|
|
128
|
+
pcp_conninfo.pass = pstrdup(strVal(def->arg));
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
return pcp_conninfo;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* nodeID: the node id to get info from
|
|
137
|
+
* host_or_srv: server name or ip address of the pgpool server
|
|
138
|
+
* timeout: timeout
|
|
139
|
+
* port: pcp port number
|
|
140
|
+
* user: user to connect with
|
|
141
|
+
* pass: password
|
|
142
|
+
**/
|
|
143
|
+
Datum
|
|
144
|
+
_pcp_node_info(PG_FUNCTION_ARGS)
|
|
145
|
+
{
|
|
146
|
+
int16 nodeID = PG_GETARG_INT16(0);
|
|
147
|
+
char * host_or_srv = text_to_cstring(PG_GETARG_TEXT_PP(1));
|
|
148
|
+
pcpConninfo pcp_conninfo;
|
|
149
|
+
|
|
150
|
+
BackendInfo * backend_info = NULL;
|
|
151
|
+
Datum values[4]; /* values to build the returned tuple from */
|
|
152
|
+
bool nulls[] = {false, false, false, false};
|
|
153
|
+
TupleDesc tupledesc;
|
|
154
|
+
HeapTuple tuple;
|
|
155
|
+
|
|
156
|
+
if (nodeID < 0 || nodeID >= MAX_NUM_BACKENDS)
|
|
157
|
+
ereport(ERROR, (0, errmsg("NodeID is out of range.")));
|
|
158
|
+
|
|
159
|
+
init_pcp_conninfo(&pcp_conninfo);
|
|
160
|
+
|
|
161
|
+
if (PG_NARGS() == 6)
|
|
162
|
+
{
|
|
163
|
+
pcp_conninfo.host = host_or_srv;
|
|
164
|
+
pcp_conninfo.timeout = PG_GETARG_INT16(2);
|
|
165
|
+
pcp_conninfo.port = PG_GETARG_INT16(3);
|
|
166
|
+
pcp_conninfo.user = text_to_cstring(PG_GETARG_TEXT_PP(4));
|
|
167
|
+
pcp_conninfo.pass = text_to_cstring(PG_GETARG_TEXT_PP(5));
|
|
168
|
+
}
|
|
169
|
+
else if (PG_NARGS() == 2)
|
|
170
|
+
{
|
|
171
|
+
pcp_conninfo = get_pcp_conninfo_from_foreign_server(host_or_srv);
|
|
172
|
+
}
|
|
173
|
+
else
|
|
174
|
+
{
|
|
175
|
+
ereport(ERROR, (0, errmsg("Wrong number of argument.")));
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
check_pcp_conninfo_props(&pcp_conninfo);
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Construct a tuple descriptor for the result rows.
|
|
182
|
+
**/
|
|
183
|
+
tupledesc = CreateTemplateTupleDesc(4, false);
|
|
184
|
+
TupleDescInitEntry(tupledesc, (AttrNumber) 1, "hostname", TEXTOID, -1, 0);
|
|
185
|
+
TupleDescInitEntry(tupledesc, (AttrNumber) 2, "port", INT4OID, -1, 0);
|
|
186
|
+
TupleDescInitEntry(tupledesc, (AttrNumber) 3, "status", TEXTOID, -1, 0);
|
|
187
|
+
TupleDescInitEntry(tupledesc, (AttrNumber) 4, "weight", FLOAT4OID, -1, 0);
|
|
188
|
+
tupledesc = BlessTupleDesc(tupledesc);
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* PCP session
|
|
192
|
+
**/
|
|
193
|
+
if (pcp_connect_conninfo(&pcp_conninfo))
|
|
194
|
+
{
|
|
195
|
+
ereport(ERROR,(0, errmsg("Cannot connect to PCP server.")));
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
if ((backend_info = pcp_node_info(nodeID)) == NULL)
|
|
199
|
+
{
|
|
200
|
+
pcp_disconnect();
|
|
201
|
+
ereport(ERROR,(0, errmsg("Cannot get node information.")));
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/* set values */
|
|
205
|
+
values[0] = CStringGetTextDatum(backend_info->backend_hostname);
|
|
206
|
+
nulls[0] = false;
|
|
207
|
+
values[1] = Int16GetDatum(backend_info->backend_port);
|
|
208
|
+
nulls[1] = false;
|
|
209
|
+
switch (backend_info->backend_status)
|
|
210
|
+
{
|
|
211
|
+
case CON_UNUSED:
|
|
212
|
+
values[2] = CStringGetTextDatum("Connection unused");
|
|
213
|
+
break;
|
|
214
|
+
case CON_CONNECT_WAIT:
|
|
215
|
+
values[2] = CStringGetTextDatum("Waiting for connection to start");
|
|
216
|
+
break;
|
|
217
|
+
case CON_UP:
|
|
218
|
+
values[2] = CStringGetTextDatum("Connection in use");
|
|
219
|
+
break;
|
|
220
|
+
case CON_DOWN:
|
|
221
|
+
values[2] = CStringGetTextDatum("Disconnected");
|
|
222
|
+
break;
|
|
223
|
+
}
|
|
224
|
+
nulls[2] = false;
|
|
225
|
+
values[3] = Float8GetDatum(backend_info->backend_weight/RAND_MAX);
|
|
226
|
+
nulls[3] = false;
|
|
227
|
+
|
|
228
|
+
free(backend_info);
|
|
229
|
+
pcp_disconnect();
|
|
230
|
+
|
|
231
|
+
/* build and return the tuple */
|
|
232
|
+
tuple = heap_form_tuple(tupledesc, values, nulls);
|
|
233
|
+
|
|
234
|
+
ReleaseTupleDesc(tupledesc);
|
|
235
|
+
|
|
236
|
+
PG_RETURN_DATUM(HeapTupleGetDatum(tuple));
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* host_or_srv: server name or ip address of the pgpool server
|
|
241
|
+
* timeout: timeout
|
|
242
|
+
* port: pcp port number
|
|
243
|
+
* user: user to connect with
|
|
244
|
+
* pass: password
|
|
245
|
+
**/
|
|
246
|
+
Datum
|
|
247
|
+
_pcp_pool_status(PG_FUNCTION_ARGS)
|
|
248
|
+
{
|
|
249
|
+
MemoryContext oldcontext;
|
|
250
|
+
FuncCallContext *funcctx;
|
|
251
|
+
POOL_REPORT_CONFIG *status;
|
|
252
|
+
int32 nrows;
|
|
253
|
+
int32 call_cntr;
|
|
254
|
+
int32 max_calls;
|
|
255
|
+
AttInMetadata *attinmeta;
|
|
256
|
+
|
|
257
|
+
/* stuff done only on the first call of the function */
|
|
258
|
+
if (SRF_IS_FIRSTCALL())
|
|
259
|
+
{
|
|
260
|
+
TupleDesc tupdesc;
|
|
261
|
+
char * host_or_srv = text_to_cstring(PG_GETARG_TEXT_PP(0));
|
|
262
|
+
pcpConninfo pcp_conninfo;
|
|
263
|
+
|
|
264
|
+
init_pcp_conninfo(&pcp_conninfo);
|
|
265
|
+
|
|
266
|
+
/* create a function context for cross-call persistence */
|
|
267
|
+
funcctx = SRF_FIRSTCALL_INIT();
|
|
268
|
+
|
|
269
|
+
/* switch to memory context appropriate for multiple function calls */
|
|
270
|
+
oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
|
|
271
|
+
|
|
272
|
+
if (PG_NARGS() == 5)
|
|
273
|
+
{
|
|
274
|
+
pcp_conninfo.host = host_or_srv;
|
|
275
|
+
pcp_conninfo.timeout = PG_GETARG_INT16(1);
|
|
276
|
+
pcp_conninfo.port = PG_GETARG_INT16(2);
|
|
277
|
+
pcp_conninfo.user = text_to_cstring(PG_GETARG_TEXT_PP(3));
|
|
278
|
+
pcp_conninfo.pass = text_to_cstring(PG_GETARG_TEXT_PP(4));
|
|
279
|
+
}
|
|
280
|
+
else if (PG_NARGS() == 1)
|
|
281
|
+
{
|
|
282
|
+
pcp_conninfo = get_pcp_conninfo_from_foreign_server(host_or_srv);
|
|
283
|
+
}
|
|
284
|
+
else
|
|
285
|
+
{
|
|
286
|
+
MemoryContextSwitchTo(oldcontext);
|
|
287
|
+
ereport(ERROR, (0, errmsg("Wrong number of argument.")));
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
check_pcp_conninfo_props(&pcp_conninfo);
|
|
291
|
+
|
|
292
|
+
/* get configuration and status */
|
|
293
|
+
/**
|
|
294
|
+
* PCP session
|
|
295
|
+
**/
|
|
296
|
+
if (pcp_connect_conninfo(&pcp_conninfo))
|
|
297
|
+
{
|
|
298
|
+
ereport(ERROR,(0, errmsg("Cannot connect to PCP server.")));
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
if ((status = pcp_pool_status(&nrows)) == NULL)
|
|
302
|
+
{
|
|
303
|
+
pcp_disconnect();
|
|
304
|
+
ereport(ERROR,(0, errmsg("Cannot pool status information.")));
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
pcp_disconnect();
|
|
308
|
+
|
|
309
|
+
/* Construct a tuple descriptor for the result rows */
|
|
310
|
+
tupdesc = CreateTemplateTupleDesc(3, false);
|
|
311
|
+
TupleDescInitEntry(tupdesc, (AttrNumber) 1, "item", TEXTOID, -1, 0);
|
|
312
|
+
TupleDescInitEntry(tupdesc, (AttrNumber) 2, "value", TEXTOID, -1, 0);
|
|
313
|
+
TupleDescInitEntry(tupdesc, (AttrNumber) 3, "description", TEXTOID, -1, 0);
|
|
314
|
+
|
|
315
|
+
/*
|
|
316
|
+
* Generate attribute metadata needed later to produce tuples from raw
|
|
317
|
+
* C strings
|
|
318
|
+
*/
|
|
319
|
+
attinmeta = TupleDescGetAttInMetadata(tupdesc);
|
|
320
|
+
funcctx->attinmeta = attinmeta;
|
|
321
|
+
|
|
322
|
+
if ((status != NULL) && (nrows > 0))
|
|
323
|
+
{
|
|
324
|
+
funcctx->max_calls = nrows;
|
|
325
|
+
|
|
326
|
+
/* got results, keep track of them */
|
|
327
|
+
funcctx->user_fctx = status;
|
|
328
|
+
}
|
|
329
|
+
else
|
|
330
|
+
{
|
|
331
|
+
/* fast track when no results */
|
|
332
|
+
MemoryContextSwitchTo(oldcontext);
|
|
333
|
+
SRF_RETURN_DONE(funcctx);
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
MemoryContextSwitchTo(oldcontext);
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
/* stuff done on every call of the function */
|
|
340
|
+
funcctx = SRF_PERCALL_SETUP();
|
|
341
|
+
|
|
342
|
+
/* initialize per-call variables */
|
|
343
|
+
call_cntr = funcctx->call_cntr;
|
|
344
|
+
max_calls = funcctx->max_calls;
|
|
345
|
+
|
|
346
|
+
status = (POOL_REPORT_CONFIG*) funcctx->user_fctx;
|
|
347
|
+
attinmeta = funcctx->attinmeta;
|
|
348
|
+
|
|
349
|
+
if (call_cntr < max_calls) /* executed while there is more left to send */
|
|
350
|
+
{
|
|
351
|
+
char * values[3];
|
|
352
|
+
HeapTuple tuple;
|
|
353
|
+
Datum result;
|
|
354
|
+
|
|
355
|
+
values[0] = pstrdup(status[call_cntr].name);
|
|
356
|
+
values[1] = pstrdup(status[call_cntr].value);
|
|
357
|
+
values[2] = pstrdup(status[call_cntr].desc);
|
|
358
|
+
|
|
359
|
+
/* build the tuple */
|
|
360
|
+
tuple = BuildTupleFromCStrings(attinmeta, values);
|
|
361
|
+
|
|
362
|
+
/* make the tuple into a datum */
|
|
363
|
+
result = HeapTupleGetDatum(tuple);
|
|
364
|
+
|
|
365
|
+
SRF_RETURN_NEXT(funcctx, result);
|
|
366
|
+
}
|
|
367
|
+
else
|
|
368
|
+
{
|
|
369
|
+
/* do when there is no more left */
|
|
370
|
+
SRF_RETURN_DONE(funcctx);
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
free(status);
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
/**
|
|
377
|
+
* nodeID: the node id to get info from
|
|
378
|
+
* host_or_srv: server name or ip address of the pgpool server
|
|
379
|
+
* timeout: timeout
|
|
380
|
+
* port: pcp port number
|
|
381
|
+
* user: user to connect with
|
|
382
|
+
* pass: password
|
|
383
|
+
**/
|
|
384
|
+
Datum
|
|
385
|
+
_pcp_node_count(PG_FUNCTION_ARGS)
|
|
386
|
+
{
|
|
387
|
+
char * host_or_srv = text_to_cstring(PG_GETARG_TEXT_PP(0));
|
|
388
|
+
pcpConninfo pcp_conninfo;
|
|
389
|
+
int16 node_count = 0;
|
|
390
|
+
|
|
391
|
+
init_pcp_conninfo(&pcp_conninfo);
|
|
392
|
+
|
|
393
|
+
if (PG_NARGS() == 5)
|
|
394
|
+
{
|
|
395
|
+
pcp_conninfo.host = host_or_srv;
|
|
396
|
+
pcp_conninfo.timeout = PG_GETARG_INT16(1);
|
|
397
|
+
pcp_conninfo.port = PG_GETARG_INT16(2);
|
|
398
|
+
pcp_conninfo.user = text_to_cstring(PG_GETARG_TEXT_PP(3));
|
|
399
|
+
pcp_conninfo.pass = text_to_cstring(PG_GETARG_TEXT_PP(4));
|
|
400
|
+
}
|
|
401
|
+
else if (PG_NARGS() == 1)
|
|
402
|
+
{
|
|
403
|
+
pcp_conninfo = get_pcp_conninfo_from_foreign_server(host_or_srv);
|
|
404
|
+
}
|
|
405
|
+
else
|
|
406
|
+
{
|
|
407
|
+
ereport(ERROR, (0, errmsg("Wrong number of argument.")));
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
check_pcp_conninfo_props(&pcp_conninfo);
|
|
411
|
+
|
|
412
|
+
/**
|
|
413
|
+
* PCP session
|
|
414
|
+
**/
|
|
415
|
+
if (pcp_connect_conninfo(&pcp_conninfo))
|
|
416
|
+
{
|
|
417
|
+
ereport(ERROR,(0, errmsg("Cannot connect to PCP server.")));
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
if ((node_count = pcp_node_count()) == -1)
|
|
421
|
+
{
|
|
422
|
+
pcp_disconnect();
|
|
423
|
+
ereport(ERROR,(0, errmsg("Cannot get node count.")));
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
pcp_disconnect();
|
|
427
|
+
|
|
428
|
+
PG_RETURN_INT16(node_count);
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
/**
|
|
432
|
+
* nodeID: the node id to get info from
|
|
433
|
+
* host_or_srv: server name or ip address of the pgpool server
|
|
434
|
+
* timeout: timeout
|
|
435
|
+
* port: pcp port number
|
|
436
|
+
* user: user to connect with
|
|
437
|
+
* pass: password
|
|
438
|
+
**/
|
|
439
|
+
Datum
|
|
440
|
+
_pcp_attach_node(PG_FUNCTION_ARGS)
|
|
441
|
+
{
|
|
442
|
+
int16 nodeID = PG_GETARG_INT16(0);
|
|
443
|
+
char * host_or_srv = text_to_cstring(PG_GETARG_TEXT_PP(1));
|
|
444
|
+
pcpConninfo pcp_conninfo;
|
|
445
|
+
int status;
|
|
446
|
+
|
|
447
|
+
if (nodeID < 0 || nodeID >= MAX_NUM_BACKENDS)
|
|
448
|
+
ereport(ERROR, (0, errmsg("NodeID is out of range.")));
|
|
449
|
+
|
|
450
|
+
init_pcp_conninfo(&pcp_conninfo);
|
|
451
|
+
|
|
452
|
+
if (PG_NARGS() == 6)
|
|
453
|
+
{
|
|
454
|
+
pcp_conninfo.host = host_or_srv;
|
|
455
|
+
pcp_conninfo.timeout = PG_GETARG_INT16(2);
|
|
456
|
+
pcp_conninfo.port = PG_GETARG_INT16(3);
|
|
457
|
+
pcp_conninfo.user = text_to_cstring(PG_GETARG_TEXT_PP(4));
|
|
458
|
+
pcp_conninfo.pass = text_to_cstring(PG_GETARG_TEXT_PP(5));
|
|
459
|
+
}
|
|
460
|
+
else if (PG_NARGS() == 2)
|
|
461
|
+
{
|
|
462
|
+
pcp_conninfo = get_pcp_conninfo_from_foreign_server(host_or_srv);
|
|
463
|
+
}
|
|
464
|
+
else
|
|
465
|
+
{
|
|
466
|
+
ereport(ERROR, (0, errmsg("Wrong number of argument.")));
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
check_pcp_conninfo_props(&pcp_conninfo);
|
|
470
|
+
|
|
471
|
+
/**
|
|
472
|
+
* PCP session
|
|
473
|
+
**/
|
|
474
|
+
if (pcp_connect_conninfo(&pcp_conninfo))
|
|
475
|
+
{
|
|
476
|
+
ereport(ERROR,(0, errmsg("Cannot connect to PCP server.")));
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
status = pcp_attach_node(nodeID);
|
|
480
|
+
|
|
481
|
+
pcp_disconnect();
|
|
482
|
+
|
|
483
|
+
if (status == -1)
|
|
484
|
+
{
|
|
485
|
+
PG_RETURN_BOOL(false);
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
PG_RETURN_BOOL(true);
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
/**
|
|
492
|
+
* nodeID: the node id to get info from
|
|
493
|
+
* gracefully: detach node gracefully if true
|
|
494
|
+
* host_or_srv: server name or ip address of the pgpool server
|
|
495
|
+
* timeout: timeout
|
|
496
|
+
* port: pcp port number
|
|
497
|
+
* user: user to connect with
|
|
498
|
+
* pass: password
|
|
499
|
+
**/
|
|
500
|
+
Datum
|
|
501
|
+
_pcp_detach_node(PG_FUNCTION_ARGS)
|
|
502
|
+
{
|
|
503
|
+
int16 nodeID = PG_GETARG_INT16(0);
|
|
504
|
+
bool gracefully = PG_GETARG_BOOL(1);
|
|
505
|
+
char * host_or_srv = text_to_cstring(PG_GETARG_TEXT_PP(2));
|
|
506
|
+
pcpConninfo pcp_conninfo;
|
|
507
|
+
int status;
|
|
508
|
+
|
|
509
|
+
if (nodeID < 0 || nodeID >= MAX_NUM_BACKENDS)
|
|
510
|
+
ereport(ERROR, (0, errmsg("NodeID is out of range.")));
|
|
511
|
+
|
|
512
|
+
init_pcp_conninfo(&pcp_conninfo);
|
|
513
|
+
|
|
514
|
+
if (PG_NARGS() == 7)
|
|
515
|
+
{
|
|
516
|
+
pcp_conninfo.host = host_or_srv;
|
|
517
|
+
pcp_conninfo.timeout = PG_GETARG_INT16(3);
|
|
518
|
+
pcp_conninfo.port = PG_GETARG_INT16(4);
|
|
519
|
+
pcp_conninfo.user = text_to_cstring(PG_GETARG_TEXT_PP(5));
|
|
520
|
+
pcp_conninfo.pass = text_to_cstring(PG_GETARG_TEXT_PP(6));
|
|
521
|
+
}
|
|
522
|
+
else if (PG_NARGS() == 3)
|
|
523
|
+
{
|
|
524
|
+
pcp_conninfo = get_pcp_conninfo_from_foreign_server(host_or_srv);
|
|
525
|
+
}
|
|
526
|
+
else
|
|
527
|
+
{
|
|
528
|
+
ereport(ERROR, (0, errmsg("Wrong number of argument.")));
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
check_pcp_conninfo_props(&pcp_conninfo);
|
|
532
|
+
|
|
533
|
+
/**
|
|
534
|
+
* PCP session
|
|
535
|
+
**/
|
|
536
|
+
if (pcp_connect_conninfo(&pcp_conninfo))
|
|
537
|
+
{
|
|
538
|
+
ereport(ERROR,(0, errmsg("Cannot connect to PCP server.")));
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
if (gracefully)
|
|
542
|
+
{
|
|
543
|
+
status = pcp_detach_node_gracefully(nodeID);
|
|
544
|
+
}
|
|
545
|
+
else
|
|
546
|
+
{
|
|
547
|
+
status = pcp_detach_node(nodeID);
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
pcp_disconnect();
|
|
551
|
+
|
|
552
|
+
if (status == -1)
|
|
553
|
+
{
|
|
554
|
+
PG_RETURN_BOOL(false);
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
PG_RETURN_BOOL(true);
|
|
558
|
+
}
|