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
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#! /bin/sh
|
|
2
|
+
# Force to flush current value of sequences to xlog
|
|
3
|
+
|
|
4
|
+
master_dir=$1
|
|
5
|
+
dest_host=$2
|
|
6
|
+
dest_dir=$3
|
|
7
|
+
|
|
8
|
+
source /etc/pgpool-II/config_for_script
|
|
9
|
+
|
|
10
|
+
log=$PGPOOL_LOG_DIR/recovery.log
|
|
11
|
+
|
|
12
|
+
if [ $dest_host = $NODE0_HOST ]; then
|
|
13
|
+
master_host=$NODE1_HOST
|
|
14
|
+
master_port=$NODE1_PORT
|
|
15
|
+
|
|
16
|
+
elif [ $dest_host = $NODE1_HOST ]; then
|
|
17
|
+
master_host=$NODE0_HOST
|
|
18
|
+
master_port=$NODE0_PORT
|
|
19
|
+
|
|
20
|
+
else
|
|
21
|
+
exit 1
|
|
22
|
+
fi
|
|
23
|
+
|
|
24
|
+
function doSQL()
|
|
25
|
+
{
|
|
26
|
+
local _DB=$1
|
|
27
|
+
local _SQL=$2
|
|
28
|
+
|
|
29
|
+
$psql -p $master_port -U $PGSUPERUSER -d $_DB -t -c "$_SQL"
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
echo "----------------------------------------------------------------------" >> $log
|
|
33
|
+
date >> $log
|
|
34
|
+
echo "----------------------------------------------------------------------" >> $log
|
|
35
|
+
echo "" >> $log
|
|
36
|
+
|
|
37
|
+
# Get dbnames
|
|
38
|
+
doSQL template1 'SELECT datname FROM pg_database WHERE NOT datistemplate AND datallowconn'
|
|
39
|
+
|
|
40
|
+
# Force to flush current value of sequences to xlog
|
|
41
|
+
while read i
|
|
42
|
+
do
|
|
43
|
+
if [ "$i" != "" ]; then
|
|
44
|
+
doSQL $i "SELECT setval(oid, nextval(oid)) FROM pg_class WHERE relkind = 'S'"
|
|
45
|
+
fi
|
|
46
|
+
done
|
|
47
|
+
doSQL template1 "SELECT pgpool_switch_xlog('$ARCHIVE_DIR')"
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#! /bin/sh
|
|
2
|
+
# start postmaster on the recoveried node
|
|
3
|
+
|
|
4
|
+
if [ $# -ne 2 ]
|
|
5
|
+
then
|
|
6
|
+
echo "pgpool_remote_start remote_host remote_datadir"
|
|
7
|
+
exit 1
|
|
8
|
+
fi
|
|
9
|
+
|
|
10
|
+
source /etc/pgpool-II/config_for_script
|
|
11
|
+
|
|
12
|
+
dest_host=$1
|
|
13
|
+
dest_dir=$2
|
|
14
|
+
|
|
15
|
+
ssh $PGSUPERUSER@$dest_host -T "$pg_ctl -w -D $dest_dir start 2>/dev/null 1>/dev/null < /dev/null &"
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
#! /bin/bash
|
|
2
|
+
PATH=/bin:/sbin:/usr/bin:/usr/sbin
|
|
3
|
+
|
|
4
|
+
MJ_VERSION=3.3
|
|
5
|
+
PKG_NAME_FOR_RPM=pgpool
|
|
6
|
+
PKG_NAME_FOR_SHOW=pgpool-II
|
|
7
|
+
|
|
8
|
+
NOBODY_SBIN=/var/private/nobody/sbin
|
|
9
|
+
PID_FILE_DIR=/var/run/pgpool/
|
|
10
|
+
PGPOOL_LOG_DIR=/var/log/pgpool
|
|
11
|
+
PGPOOL_CONF_DIR=/etc/pgpool-II
|
|
12
|
+
ADMIN_DIR=/var/www/html/pgpoolAdmin
|
|
13
|
+
|
|
14
|
+
rpm -qa | grep -q $PKG_NAME_FOR_RPM
|
|
15
|
+
if [ $? -ne 0 ]; then
|
|
16
|
+
echo "$PKG_NAME_FOR_SHOW $MJ_VERSION is not installed."
|
|
17
|
+
exit 1
|
|
18
|
+
fi
|
|
19
|
+
|
|
20
|
+
if [ $(id -un) != root ]; then
|
|
21
|
+
echo "Must be uninstalled as root."
|
|
22
|
+
exit 1
|
|
23
|
+
fi
|
|
24
|
+
|
|
25
|
+
while :; do
|
|
26
|
+
echo -n "Do you uninstall $PKG_NAME_FOR_SHOW $MJ_VERSION (yes/no): "
|
|
27
|
+
read reply
|
|
28
|
+
case $reply in
|
|
29
|
+
[yY] | [yY][eE][sS])
|
|
30
|
+
break
|
|
31
|
+
;;
|
|
32
|
+
[nN] | [nN][oO])
|
|
33
|
+
echo "Uninstallation is canceled."
|
|
34
|
+
exit 1
|
|
35
|
+
;;
|
|
36
|
+
esac
|
|
37
|
+
done
|
|
38
|
+
echo
|
|
39
|
+
|
|
40
|
+
killall pgpool
|
|
41
|
+
echo "Uninstalling packages..."
|
|
42
|
+
rpm -qa | grep ${PKG_NAME_FOR_RPM} | xargs rpm -ev
|
|
43
|
+
if [ $? -ne 0 ]; then
|
|
44
|
+
echo "Failed to uninstall packages."
|
|
45
|
+
exit 1
|
|
46
|
+
fi
|
|
47
|
+
echo
|
|
48
|
+
|
|
49
|
+
rm -rf $NOBODY_SBIN
|
|
50
|
+
rm -rf $PID_FILE_DIR
|
|
51
|
+
rm -rf $PGPOOL_LOG_DIR
|
|
52
|
+
rm -rf $PGPOOL_CONF_DIR
|
|
53
|
+
rm -rf $ADMIN_DIR
|
|
54
|
+
|
|
55
|
+
echo "Uninstallation is completed successfully."
|
|
56
|
+
|
|
57
|
+
exit 0
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
-- $Header$
|
|
2
|
+
|
|
3
|
+
INSERT INTO pgpool_catalog.dist_def VALUES (
|
|
4
|
+
'bench_parallel',
|
|
5
|
+
'public',
|
|
6
|
+
'branches',
|
|
7
|
+
'bid',
|
|
8
|
+
ARRAY['bid', 'bbalance', 'filler'],
|
|
9
|
+
ARRAY['integer', 'integer', 'character(88)'],
|
|
10
|
+
'pgpool_catalog.dist_def_branches'
|
|
11
|
+
);
|
|
12
|
+
|
|
13
|
+
INSERT INTO pgpool_catalog.dist_def VALUES (
|
|
14
|
+
'bench_parallel',
|
|
15
|
+
'public',
|
|
16
|
+
'tellers',
|
|
17
|
+
'tid',
|
|
18
|
+
ARRAY['tid', 'bid', 'tbalance', 'filler'],
|
|
19
|
+
ARRAY['integer', 'integer', 'integer', 'character(84)'],
|
|
20
|
+
'pgpool_catalog.dist_def_tellers'
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
INSERT INTO pgpool_catalog.dist_def VALUES (
|
|
24
|
+
'bench_parallel',
|
|
25
|
+
'public',
|
|
26
|
+
'accounts',
|
|
27
|
+
'aid',
|
|
28
|
+
ARRAY['aid', 'bid', 'abalance', 'filler'],
|
|
29
|
+
ARRAY['integer', 'integer', 'integer', 'character(84)'],
|
|
30
|
+
'pgpool_catalog.dist_def_accounts'
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
INSERT INTO pgpool_catalog.dist_def VALUES (
|
|
34
|
+
'bench_parallel',
|
|
35
|
+
'public',
|
|
36
|
+
'history',
|
|
37
|
+
'tid',
|
|
38
|
+
ARRAY['tid', 'bid', 'aid', 'delta', 'mtime', 'filler'],
|
|
39
|
+
ARRAY['integer', 'integer', 'integer', 'integer', 'timestamp without time zone', 'character(22)'],
|
|
40
|
+
'pgpool_catalog.dist_def_history'
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
CREATE OR REPLACE FUNCTION pgpool_catalog.dist_def_branches(anyelement)
|
|
44
|
+
RETURNS integer AS $$
|
|
45
|
+
SELECT CASE WHEN $1 > 0 AND $1 <= 1 THEN 0
|
|
46
|
+
WHEN $1 > 1 AND $1 <= 2 THEN 1
|
|
47
|
+
ELSE 2
|
|
48
|
+
END;
|
|
49
|
+
$$ LANGUAGE sql;
|
|
50
|
+
|
|
51
|
+
CREATE OR REPLACE FUNCTION pgpool_catalog.dist_def_tellers(anyelement)
|
|
52
|
+
RETURNS integer AS $$
|
|
53
|
+
SELECT CASE WHEN $1 > 0 AND $1 <= 10 THEN 0
|
|
54
|
+
WHEN $1 > 10 AND $1 <= 20 THEN 1
|
|
55
|
+
ELSE 2
|
|
56
|
+
END;
|
|
57
|
+
$$ LANGUAGE sql;
|
|
58
|
+
|
|
59
|
+
CREATE OR REPLACE FUNCTION pgpool_catalog.dist_def_accounts(anyelement)
|
|
60
|
+
RETURNS integer AS $$
|
|
61
|
+
SELECT CASE WHEN $1 > 0 AND $1 <= 100000 THEN 0
|
|
62
|
+
WHEN $1 > 100000 AND $1 <= 200000 THEN 1
|
|
63
|
+
ELSE 2
|
|
64
|
+
END;
|
|
65
|
+
$$ LANGUAGE sql;
|
|
66
|
+
|
|
67
|
+
CREATE OR REPLACE FUNCTION pgpool_catalog.dist_def_history(anyelement)
|
|
68
|
+
RETURNS integer AS $$
|
|
69
|
+
SELECT CASE WHEN $1 > 0 AND $1 <= 10 THEN 0
|
|
70
|
+
WHEN $1 > 10 AND $1 <= 20 THEN 1
|
|
71
|
+
ELSE 2
|
|
72
|
+
END;
|
|
73
|
+
$$ LANGUAGE sql;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#! /bin/sh
|
|
2
|
+
|
|
3
|
+
if [ $# -ne 3 ]
|
|
4
|
+
then
|
|
5
|
+
echo "pgpool_recovery datadir remote_host remote_datadir"
|
|
6
|
+
exit 1
|
|
7
|
+
fi
|
|
8
|
+
|
|
9
|
+
datadir=$1
|
|
10
|
+
DEST=$2
|
|
11
|
+
DESTDIR=$3
|
|
12
|
+
|
|
13
|
+
rsync -acurz --delete -e ssh $datadir/global/ $DEST:$DESTDIR/global/ &
|
|
14
|
+
rsync -acurz --delete -e ssh $datadir/base/ $DEST:$DESTDIR/base/ &
|
|
15
|
+
rsync -acurz --delete -e ssh $datadir/pg_multixact/ $DEST:$DESTDIR/pg_multixact/ &
|
|
16
|
+
rsync -acurz --delete -e ssh $datadir/pg_subtrans/ $DEST:$DESTDIR/pg_subtrans/ &
|
|
17
|
+
rsync -acurz --delete -e ssh $datadir/pg_clog/ $DEST:$DESTDIR/pg_clog/ &
|
|
18
|
+
rsync -acurz --delete -e ssh $datadir/pg_xlog/ $DEST:$DESTDIR/pg_xlog/ &
|
|
19
|
+
rsync -acurz --delete -e ssh $datadir/pg_twophase/ $DEST:$DESTDIR/pg_twophase/ &
|
|
20
|
+
wait
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#! /bin/sh
|
|
2
|
+
# Online recovery 2nd stage script
|
|
3
|
+
#
|
|
4
|
+
datadir=$1 # master dabatase cluster
|
|
5
|
+
DEST=$2 # hostname of the DB node to be recovered
|
|
6
|
+
DESTDIR=$3 # database cluster of the DB node to be recovered
|
|
7
|
+
port=5432 # PostgreSQL port number
|
|
8
|
+
archdir=/data/archive_log # archive log directory
|
|
9
|
+
|
|
10
|
+
# Force to flush current value of sequences to xlog
|
|
11
|
+
psql -p $port -t -c 'SELECT datname FROM pg_database WHERE NOT datistemplate AND datallowconn' template1|
|
|
12
|
+
while read i
|
|
13
|
+
do
|
|
14
|
+
if [ "$i" != "" ];then
|
|
15
|
+
psql -p $port -c "SELECT setval(oid, nextval(oid)) FROM pg_class WHERE relkind = 'S'" $i
|
|
16
|
+
fi
|
|
17
|
+
done
|
|
18
|
+
|
|
19
|
+
psql -p $port -c "SELECT pgpool_switch_xlog('$archdir')" template1
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#! /bin/sh
|
|
2
|
+
|
|
3
|
+
if [ $# -ne 2 ]
|
|
4
|
+
then
|
|
5
|
+
echo "pgpool_remote_start remote_host remote_datadir"
|
|
6
|
+
exit 1
|
|
7
|
+
fi
|
|
8
|
+
|
|
9
|
+
DEST=$1
|
|
10
|
+
DESTDIR=$2
|
|
11
|
+
PGCTL=/usr/local/pgsql/bin/pg_ctl
|
|
12
|
+
|
|
13
|
+
ssh -T $DEST $PGCTL -w -D $DESTDIR start 2>/dev/null 1>/dev/null < /dev/null &
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
-- $Header$
|
|
2
|
+
|
|
3
|
+
INSERT INTO pgpool_catalog.replicate_def VALUES (
|
|
4
|
+
'bench_parallel',
|
|
5
|
+
'public',
|
|
6
|
+
'branches',
|
|
7
|
+
ARRAY['bid', 'bbalance', 'filler'],
|
|
8
|
+
ARRAY['integer', 'integer', 'character(88)']
|
|
9
|
+
);
|
|
10
|
+
|
|
11
|
+
INSERT INTO pgpool_catalog.replicate_def VALUES (
|
|
12
|
+
'bench_parallel',
|
|
13
|
+
'public',
|
|
14
|
+
'tellers',
|
|
15
|
+
ARRAY['tid', 'bid', 'tbalance', 'filler'],
|
|
16
|
+
ARRAY['integer', 'integer', 'integer', 'character(84)']
|
|
17
|
+
);
|
|
18
|
+
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
-- Create lock control table for tables using sequence in native replication mode.
|
|
2
|
+
|
|
3
|
+
DROP TABLE pgpool_catalog.insert_lock;
|
|
4
|
+
|
|
5
|
+
CREATE SCHEMA pgpool_catalog;
|
|
6
|
+
CREATE TABLE pgpool_catalog.insert_lock(reloid OID PRIMARY KEY);
|
|
7
|
+
|
|
8
|
+
-- this row is used as the row lock target when pgpool inserts new oid
|
|
9
|
+
INSERT INTO pgpool_catalog.insert_lock VALUES (0);
|
|
10
|
+
|
|
11
|
+
-- allow "SELECT ... FOR UPDATE" and "INSERT ..." to all roles
|
|
12
|
+
GRANT USAGE ON SCHEMA pgpool_catalog TO PUBLIC;
|
|
13
|
+
GRANT SELECT ON pgpool_catalog.insert_lock TO PUBLIC;
|
|
14
|
+
GRANT UPDATE ON pgpool_catalog.insert_lock TO PUBLIC;
|
|
15
|
+
GRANT INSERT ON pgpool_catalog.insert_lock TO PUBLIC;
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
/* -*-pgsql-c-*- */
|
|
2
|
+
/*
|
|
3
|
+
* $Header$
|
|
4
|
+
*
|
|
5
|
+
* pgpool-recovery: exec online recovery script from SELECT statement.
|
|
6
|
+
*
|
|
7
|
+
* Copyright (c) 2003-2013 PgPool Global Development Group
|
|
8
|
+
*
|
|
9
|
+
* Permission to use, copy, modify, and distribute this software and
|
|
10
|
+
* its documentation for any purpose and without fee is hereby
|
|
11
|
+
* granted, provided that the above copyright notice appear in all
|
|
12
|
+
* copies and that both that copyright notice and this permission
|
|
13
|
+
* notice appear in supporting documentation, and that the name of the
|
|
14
|
+
* author not be used in advertising or publicity pertaining to
|
|
15
|
+
* distribution of the software without specific, written prior
|
|
16
|
+
* permission. The author makes no representations about the
|
|
17
|
+
* suitability of this software for any purpose. It is provided "as
|
|
18
|
+
* is" without express or implied warranty.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
#include <sys/types.h>
|
|
22
|
+
#include <sys/stat.h>
|
|
23
|
+
#include <unistd.h>
|
|
24
|
+
#include "postgres.h"
|
|
25
|
+
#include "fmgr.h"
|
|
26
|
+
#include "miscadmin.h"
|
|
27
|
+
#include "executor/spi.h"
|
|
28
|
+
#include "funcapi.h"
|
|
29
|
+
#include "catalog/namespace.h"
|
|
30
|
+
#include "utils/syscache.h"
|
|
31
|
+
#include "utils/builtins.h" /* PostgreSQL 8.4 needs this for textout */
|
|
32
|
+
#include "utils/guc.h"
|
|
33
|
+
#if defined(PG_VERSION_NUM) && (PG_VERSION_NUM >= 90300)
|
|
34
|
+
#include "access/htup_details.h" /* PostgreSQL 9.3 or later needs this */
|
|
35
|
+
#endif
|
|
36
|
+
|
|
37
|
+
#define REMOTE_START_FILE "pgpool_remote_start"
|
|
38
|
+
|
|
39
|
+
#include <stdlib.h>
|
|
40
|
+
|
|
41
|
+
#ifdef PG_MODULE_MAGIC
|
|
42
|
+
PG_MODULE_MAGIC;
|
|
43
|
+
#endif
|
|
44
|
+
|
|
45
|
+
PG_FUNCTION_INFO_V1(pgpool_recovery);
|
|
46
|
+
PG_FUNCTION_INFO_V1(pgpool_remote_start);
|
|
47
|
+
PG_FUNCTION_INFO_V1(pgpool_pgctl);
|
|
48
|
+
PG_FUNCTION_INFO_V1(pgpool_switch_xlog);
|
|
49
|
+
|
|
50
|
+
extern Datum pgpool_recovery(PG_FUNCTION_ARGS);
|
|
51
|
+
extern Datum pgpool_remote_start(PG_FUNCTION_ARGS);
|
|
52
|
+
extern Datum pgpool_pgctl(PG_FUNCTION_ARGS);
|
|
53
|
+
extern Datum pgpool_switch_xlog(PG_FUNCTION_ARGS);
|
|
54
|
+
|
|
55
|
+
static char recovery_script[1024];
|
|
56
|
+
static char command_text[1024];
|
|
57
|
+
|
|
58
|
+
static Oid get_function_oid(const char *funcname, const char *argtype, const char *nspname);
|
|
59
|
+
char *Log_line_prefix = NULL;
|
|
60
|
+
Datum
|
|
61
|
+
pgpool_recovery(PG_FUNCTION_ARGS)
|
|
62
|
+
{
|
|
63
|
+
int r;
|
|
64
|
+
char *script = DatumGetCString(DirectFunctionCall1(textout,
|
|
65
|
+
PointerGetDatum(PG_GETARG_TEXT_P(0))));
|
|
66
|
+
|
|
67
|
+
char *remote_host = DatumGetCString(DirectFunctionCall1(textout,
|
|
68
|
+
PointerGetDatum(PG_GETARG_TEXT_P(1))));
|
|
69
|
+
char *remote_data_directory = DatumGetCString(DirectFunctionCall1(textout,
|
|
70
|
+
PointerGetDatum(PG_GETARG_TEXT_P(2))));
|
|
71
|
+
|
|
72
|
+
if (!superuser())
|
|
73
|
+
#ifdef ERRCODE_INSUFFICIENT_PRIVILEGE
|
|
74
|
+
ereport(ERROR,
|
|
75
|
+
(errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
|
|
76
|
+
(errmsg("must be superuser to use pgpool_recovery function"))));
|
|
77
|
+
#else
|
|
78
|
+
elog(ERROR, "must be superuser to use pgpool_recovery function");
|
|
79
|
+
#endif
|
|
80
|
+
|
|
81
|
+
snprintf(recovery_script, sizeof(recovery_script), "%s/%s %s %s %s",
|
|
82
|
+
DataDir, script, DataDir, remote_host,
|
|
83
|
+
remote_data_directory);
|
|
84
|
+
elog(DEBUG1, "recovery_script: %s", recovery_script);
|
|
85
|
+
r = system(recovery_script);
|
|
86
|
+
|
|
87
|
+
if (r != 0)
|
|
88
|
+
{
|
|
89
|
+
elog(ERROR, "pgpool_recovery failed");
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
PG_RETURN_BOOL(true);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
Datum
|
|
97
|
+
pgpool_remote_start(PG_FUNCTION_ARGS)
|
|
98
|
+
{
|
|
99
|
+
int r;
|
|
100
|
+
char *remote_host = DatumGetCString(DirectFunctionCall1(textout,
|
|
101
|
+
PointerGetDatum(PG_GETARG_TEXT_P(0))));
|
|
102
|
+
char *remote_data_directory = DatumGetCString(DirectFunctionCall1(textout,
|
|
103
|
+
PointerGetDatum(PG_GETARG_TEXT_P(1))));
|
|
104
|
+
if (!superuser())
|
|
105
|
+
#ifdef ERRCODE_INSUFFICIENT_PRIVILEGE
|
|
106
|
+
ereport(ERROR,
|
|
107
|
+
(errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
|
|
108
|
+
(errmsg("must be superuser to use pgpool_remote_start function"))));
|
|
109
|
+
#else
|
|
110
|
+
elog(ERROR, "must be superuser to use pgpool_remote_start function");
|
|
111
|
+
#endif
|
|
112
|
+
|
|
113
|
+
snprintf(recovery_script, sizeof(recovery_script),
|
|
114
|
+
"%s/%s %s %s", DataDir, REMOTE_START_FILE,
|
|
115
|
+
remote_host, remote_data_directory);
|
|
116
|
+
elog(DEBUG1, "recovery_script: %s", recovery_script);
|
|
117
|
+
r = system(recovery_script);
|
|
118
|
+
|
|
119
|
+
if (r != 0)
|
|
120
|
+
{
|
|
121
|
+
elog(ERROR, "pgpool_remote_start failed");
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
PG_RETURN_BOOL(true);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
Datum
|
|
128
|
+
pgpool_pgctl(PG_FUNCTION_ARGS)
|
|
129
|
+
{
|
|
130
|
+
int r;
|
|
131
|
+
char *action = DatumGetCString(DirectFunctionCall1(textout,
|
|
132
|
+
PointerGetDatum(PG_GETARG_TEXT_P(0))));
|
|
133
|
+
char *stop_mode = DatumGetCString(DirectFunctionCall1(textout,
|
|
134
|
+
PointerGetDatum(PG_GETARG_TEXT_P(1))));
|
|
135
|
+
char *pg_ctl;
|
|
136
|
+
char *data_directory;
|
|
137
|
+
|
|
138
|
+
if (!superuser())
|
|
139
|
+
#ifdef ERRCODE_INSUFFICIENT_PRIVILEGE
|
|
140
|
+
ereport(ERROR,
|
|
141
|
+
(errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
|
|
142
|
+
(errmsg("must be superuser to use pgpool_pgctl function"))));
|
|
143
|
+
#else
|
|
144
|
+
elog(ERROR, "must be superuser to use pgpool_pgctl function");
|
|
145
|
+
#endif
|
|
146
|
+
|
|
147
|
+
pg_ctl = GetConfigOptionByName("pgpool.pg_ctl", NULL);
|
|
148
|
+
data_directory = GetConfigOptionByName("data_directory", NULL);
|
|
149
|
+
|
|
150
|
+
if (strcmp(stop_mode, "") != 0)
|
|
151
|
+
{
|
|
152
|
+
snprintf(command_text, sizeof(command_text),
|
|
153
|
+
"%s %s -D %s -m %s 2>/dev/null 1>/dev/null < /dev/null &",
|
|
154
|
+
pg_ctl, action, data_directory, stop_mode);
|
|
155
|
+
|
|
156
|
+
} else {
|
|
157
|
+
snprintf(command_text, sizeof(command_text),
|
|
158
|
+
"%s %s -D %s 2>/dev/null 1>/dev/null < /dev/null &",
|
|
159
|
+
pg_ctl, action, data_directory);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
elog(DEBUG1, "command_text: %s", command_text);
|
|
163
|
+
r = system(command_text);
|
|
164
|
+
|
|
165
|
+
if (strcmp(action, "reload") == 0 && r != 0)
|
|
166
|
+
{
|
|
167
|
+
elog(ERROR, "pgpool_pgctl failed");
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
PG_RETURN_BOOL(true);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/*
|
|
174
|
+
* pgpool_switch_log is the same as pg_switch_xlog except that
|
|
175
|
+
* it wait till archiving is completed.
|
|
176
|
+
* We call xlog functions with the oid to avoid a compile error
|
|
177
|
+
* at old PostgreSQL.
|
|
178
|
+
*/
|
|
179
|
+
Datum
|
|
180
|
+
pgpool_switch_xlog(PG_FUNCTION_ARGS)
|
|
181
|
+
{
|
|
182
|
+
char *archive_dir;
|
|
183
|
+
char *filename;
|
|
184
|
+
char path[MAXPGPATH];
|
|
185
|
+
struct stat fst;
|
|
186
|
+
Datum location;
|
|
187
|
+
text *filename_t;
|
|
188
|
+
text *result;
|
|
189
|
+
Oid switch_xlog_oid;
|
|
190
|
+
Oid xlogfile_name_oid;
|
|
191
|
+
|
|
192
|
+
archive_dir = DatumGetCString(DirectFunctionCall1(textout,
|
|
193
|
+
PointerGetDatum(PG_GETARG_TEXT_P(0))));
|
|
194
|
+
|
|
195
|
+
if (stat(archive_dir, &fst) < 0)
|
|
196
|
+
#ifdef ERRCODE_INSUFFICIENT_PRIVILEGE
|
|
197
|
+
ereport(ERROR,
|
|
198
|
+
(errcode_for_file_access(),
|
|
199
|
+
errmsg("could not stat file \"%s\": %m", archive_dir)));
|
|
200
|
+
#else
|
|
201
|
+
elog(ERROR, "could not stat file \"%s\"", archive_dir);
|
|
202
|
+
#endif
|
|
203
|
+
|
|
204
|
+
switch_xlog_oid = get_function_oid("pg_switch_xlog", NULL, "pg_catalog");
|
|
205
|
+
xlogfile_name_oid = get_function_oid("pg_xlogfile_name", "text", "pg_catalog");
|
|
206
|
+
|
|
207
|
+
if (!switch_xlog_oid || !xlogfile_name_oid)
|
|
208
|
+
elog(ERROR, "cannot find xlog functions");
|
|
209
|
+
|
|
210
|
+
location = OidFunctionCall1(switch_xlog_oid, PointerGetDatum(NULL));
|
|
211
|
+
filename_t = DatumGetTextP(OidFunctionCall1(xlogfile_name_oid, location));
|
|
212
|
+
filename = DatumGetCString(DirectFunctionCall1(textout,
|
|
213
|
+
PointerGetDatum(filename_t)));
|
|
214
|
+
|
|
215
|
+
snprintf(path, MAXPGPATH, "%s/%s", archive_dir, filename);
|
|
216
|
+
elog(LOG, "pgpool_switch_xlog: waiting for \"%s\"", path);
|
|
217
|
+
|
|
218
|
+
while(stat(path, &fst) != 0 || fst.st_size == 0 ||
|
|
219
|
+
fst.st_size % (1024 * 1024) != 0)
|
|
220
|
+
{
|
|
221
|
+
CHECK_FOR_INTERRUPTS();
|
|
222
|
+
sleep(1);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
result = DatumGetTextP(DirectFunctionCall1(textin,
|
|
226
|
+
CStringGetDatum(path)));
|
|
227
|
+
|
|
228
|
+
PG_RETURN_TEXT_P(result);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
static Oid
|
|
232
|
+
get_function_oid(const char *funcname, const char *argtype, const char *nspname)
|
|
233
|
+
{
|
|
234
|
+
#ifndef PROCNAMENSP
|
|
235
|
+
Oid typid;
|
|
236
|
+
Oid nspid;
|
|
237
|
+
Oid funcid;
|
|
238
|
+
Oid oids[1];
|
|
239
|
+
oidvector *oid_v;
|
|
240
|
+
HeapTuple tup;
|
|
241
|
+
|
|
242
|
+
if (argtype)
|
|
243
|
+
{
|
|
244
|
+
typid = TypenameGetTypid(argtype);
|
|
245
|
+
elog(DEBUG1, "get_function_oid: %s typid: %d", argtype, typid);
|
|
246
|
+
oids[0] = typid;
|
|
247
|
+
oid_v = buildoidvector(oids, 1);
|
|
248
|
+
}
|
|
249
|
+
else
|
|
250
|
+
{
|
|
251
|
+
oid_v = buildoidvector(NULL, 0);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
#if !defined(PG_VERSION_NUM) || (PG_VERSION_NUM < 90300)
|
|
255
|
+
nspid = LookupExplicitNamespace(nspname);
|
|
256
|
+
#else
|
|
257
|
+
/* LookupExplicitNamespace() of PostgreSQL 9.3 or later, has third
|
|
258
|
+
* argument "missing_ok" which suppresses ERROR exception, but
|
|
259
|
+
* returns invlaid_oid. See include/catalog/namespace.h */
|
|
260
|
+
nspid = LookupExplicitNamespace(nspname, false);
|
|
261
|
+
#endif
|
|
262
|
+
elog(DEBUG1, "get_function_oid: oid of \"%s\": %d", nspname, nspid);
|
|
263
|
+
|
|
264
|
+
tup = SearchSysCache(PROCNAMEARGSNSP,
|
|
265
|
+
PointerGetDatum(funcname),
|
|
266
|
+
PointerGetDatum(oid_v),
|
|
267
|
+
ObjectIdGetDatum(nspid),
|
|
268
|
+
0);
|
|
269
|
+
|
|
270
|
+
if (HeapTupleIsValid(tup))
|
|
271
|
+
{
|
|
272
|
+
funcid = HeapTupleGetOid(tup);
|
|
273
|
+
elog(DEBUG1, "get_function_oid: oid of \"%s\": %d", funcname, funcid);
|
|
274
|
+
ReleaseSysCache(tup);
|
|
275
|
+
return funcid;
|
|
276
|
+
}
|
|
277
|
+
#endif
|
|
278
|
+
return 0;
|
|
279
|
+
}
|
|
280
|
+
|