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.
Files changed (393) hide show
  1. data/.gitignore +4 -0
  2. data/Gemfile +2 -0
  3. data/Gemfile.lock +20 -0
  4. data/LICENSE +202 -0
  5. data/NOTICE +22 -0
  6. data/README.md +217 -0
  7. data/Rakefile +13 -0
  8. data/VERSION +1 -0
  9. data/bin/prestogres +254 -0
  10. data/config/pcp.conf.sample +28 -0
  11. data/config/pgpool.conf +678 -0
  12. data/config/pool_hba.conf +84 -0
  13. data/config/pool_passwd +0 -0
  14. data/config/postgresql.conf +2 -0
  15. data/ext/.gitignore +6 -0
  16. data/ext/depend +26 -0
  17. data/ext/extconf.rb +4 -0
  18. data/ext/prestogres_config.c +12 -0
  19. data/pgpool2/.gitignore +36 -0
  20. data/pgpool2/AUTHORS +4 -0
  21. data/pgpool2/COPYING +12 -0
  22. data/pgpool2/ChangeLog +1 -0
  23. data/pgpool2/INSTALL +1 -0
  24. data/pgpool2/Makefile.am +159 -0
  25. data/pgpool2/Makefile.in +1187 -0
  26. data/pgpool2/NEWS +4960 -0
  27. data/pgpool2/README +1 -0
  28. data/pgpool2/README.euc_jp +1 -0
  29. data/pgpool2/README.online-recovery +62 -0
  30. data/pgpool2/TODO +103 -0
  31. data/pgpool2/ac_func_accept_argtypes.m4 +85 -0
  32. data/pgpool2/aclocal.m4 +1088 -0
  33. data/pgpool2/c-compiler.m4 +134 -0
  34. data/pgpool2/c-library.m4 +325 -0
  35. data/pgpool2/child.c +2097 -0
  36. data/pgpool2/config.guess +1532 -0
  37. data/pgpool2/config.h.in +332 -0
  38. data/pgpool2/config.sub +1640 -0
  39. data/pgpool2/configure +15752 -0
  40. data/pgpool2/configure.in +392 -0
  41. data/pgpool2/depcomp +522 -0
  42. data/pgpool2/doc/basebackup.sh +17 -0
  43. data/pgpool2/doc/pgpool-de.html +4220 -0
  44. data/pgpool2/doc/pgpool-en.html +5738 -0
  45. data/pgpool2/doc/pgpool-fr.html +4118 -0
  46. data/pgpool2/doc/pgpool-ja.css +198 -0
  47. data/pgpool2/doc/pgpool-ja.html +11279 -0
  48. data/pgpool2/doc/pgpool-zh_cn.html +4445 -0
  49. data/pgpool2/doc/pgpool.css +280 -0
  50. data/pgpool2/doc/pgpool_remote_start +13 -0
  51. data/pgpool2/doc/recovery.conf.sample +117 -0
  52. data/pgpool2/doc/tutorial-en.html +707 -0
  53. data/pgpool2/doc/tutorial-ja.html +422 -0
  54. data/pgpool2/doc/tutorial-memqcache-en.html +325 -0
  55. data/pgpool2/doc/tutorial-memqcache-ja.html +370 -0
  56. data/pgpool2/doc/tutorial-memqcache-zh_cn.html +322 -0
  57. data/pgpool2/doc/tutorial-watchdog-en.html +306 -0
  58. data/pgpool2/doc/tutorial-watchdog-ja.html +343 -0
  59. data/pgpool2/doc/tutorial-watchdog-zh_cn.html +301 -0
  60. data/pgpool2/doc/tutorial-zh_cn.html +537 -0
  61. data/pgpool2/doc/watchdog.png +0 -0
  62. data/pgpool2/doc/wd-en.html +236 -0
  63. data/pgpool2/doc/wd-en.jpg +0 -0
  64. data/pgpool2/doc/wd-ja.html +219 -0
  65. data/pgpool2/doc/wd-ja.jpg +0 -0
  66. data/pgpool2/doc/wd-zh_cn.html +201 -0
  67. data/pgpool2/doc/where_to_send_queries.odg +0 -0
  68. data/pgpool2/doc/where_to_send_queries.pdf +0 -0
  69. data/pgpool2/general.m4 +166 -0
  70. data/pgpool2/getopt_long.c +200 -0
  71. data/pgpool2/getopt_long.h +44 -0
  72. data/pgpool2/install-sh +251 -0
  73. data/pgpool2/ltmain.sh +8406 -0
  74. data/pgpool2/m4/libtool.m4 +7360 -0
  75. data/pgpool2/m4/ltoptions.m4 +368 -0
  76. data/pgpool2/m4/ltsugar.m4 +123 -0
  77. data/pgpool2/m4/ltversion.m4 +23 -0
  78. data/pgpool2/m4/lt~obsolete.m4 +92 -0
  79. data/pgpool2/main.c +2971 -0
  80. data/pgpool2/md5.c +444 -0
  81. data/pgpool2/md5.h +28 -0
  82. data/pgpool2/missing +360 -0
  83. data/pgpool2/mkinstalldirs +40 -0
  84. data/pgpool2/parser/Makefile.am +50 -0
  85. data/pgpool2/parser/Makefile.in +559 -0
  86. data/pgpool2/parser/copyfuncs.c +3310 -0
  87. data/pgpool2/parser/gram.c +39100 -0
  88. data/pgpool2/parser/gram.h +940 -0
  89. data/pgpool2/parser/gram.y +13408 -0
  90. data/pgpool2/parser/gramparse.h +74 -0
  91. data/pgpool2/parser/keywords.c +32 -0
  92. data/pgpool2/parser/keywords.h +39 -0
  93. data/pgpool2/parser/kwlist.h +425 -0
  94. data/pgpool2/parser/kwlookup.c +88 -0
  95. data/pgpool2/parser/list.c +1156 -0
  96. data/pgpool2/parser/makefuncs.c +518 -0
  97. data/pgpool2/parser/makefuncs.h +83 -0
  98. data/pgpool2/parser/memnodes.h +79 -0
  99. data/pgpool2/parser/nodes.c +29 -0
  100. data/pgpool2/parser/nodes.h +609 -0
  101. data/pgpool2/parser/outfuncs.c +5790 -0
  102. data/pgpool2/parser/parsenodes.h +2615 -0
  103. data/pgpool2/parser/parser.c +262 -0
  104. data/pgpool2/parser/parser.h +46 -0
  105. data/pgpool2/parser/pg_class.h +158 -0
  106. data/pgpool2/parser/pg_config_manual.h +273 -0
  107. data/pgpool2/parser/pg_list.h +352 -0
  108. data/pgpool2/parser/pg_trigger.h +147 -0
  109. data/pgpool2/parser/pg_wchar.h +492 -0
  110. data/pgpool2/parser/pool_memory.c +342 -0
  111. data/pgpool2/parser/pool_memory.h +77 -0
  112. data/pgpool2/parser/pool_parser.h +222 -0
  113. data/pgpool2/parser/pool_string.c +121 -0
  114. data/pgpool2/parser/pool_string.h +37 -0
  115. data/pgpool2/parser/primnodes.h +1280 -0
  116. data/pgpool2/parser/scan.c +4094 -0
  117. data/pgpool2/parser/scan.l +1451 -0
  118. data/pgpool2/parser/scanner.h +120 -0
  119. data/pgpool2/parser/scansup.c +221 -0
  120. data/pgpool2/parser/scansup.h +28 -0
  121. data/pgpool2/parser/snprintf.c +1102 -0
  122. data/pgpool2/parser/stringinfo.c +294 -0
  123. data/pgpool2/parser/stringinfo.h +178 -0
  124. data/pgpool2/parser/value.c +78 -0
  125. data/pgpool2/parser/value.h +62 -0
  126. data/pgpool2/parser/wchar.c +2048 -0
  127. data/pgpool2/pcp.conf.sample +28 -0
  128. data/pgpool2/pcp/Makefile.am +40 -0
  129. data/pgpool2/pcp/Makefile.in +771 -0
  130. data/pgpool2/pcp/libpcp_ext.h +250 -0
  131. data/pgpool2/pcp/md5.c +444 -0
  132. data/pgpool2/pcp/md5.h +28 -0
  133. data/pgpool2/pcp/pcp.c +1652 -0
  134. data/pgpool2/pcp/pcp.h +61 -0
  135. data/pgpool2/pcp/pcp_attach_node.c +172 -0
  136. data/pgpool2/pcp/pcp_detach_node.c +185 -0
  137. data/pgpool2/pcp/pcp_error.c +87 -0
  138. data/pgpool2/pcp/pcp_node_count.c +160 -0
  139. data/pgpool2/pcp/pcp_node_info.c +198 -0
  140. data/pgpool2/pcp/pcp_pool_status.c +166 -0
  141. data/pgpool2/pcp/pcp_proc_count.c +166 -0
  142. data/pgpool2/pcp/pcp_proc_info.c +261 -0
  143. data/pgpool2/pcp/pcp_promote_node.c +185 -0
  144. data/pgpool2/pcp/pcp_recovery_node.c +172 -0
  145. data/pgpool2/pcp/pcp_stop_pgpool.c +179 -0
  146. data/pgpool2/pcp/pcp_stream.c +385 -0
  147. data/pgpool2/pcp/pcp_stream.h +52 -0
  148. data/pgpool2/pcp/pcp_systemdb_info.c +194 -0
  149. data/pgpool2/pcp/pcp_watchdog_info.c +211 -0
  150. data/pgpool2/pcp_child.c +1493 -0
  151. data/pgpool2/pg_md5.c +305 -0
  152. data/pgpool2/pgpool.8.in +121 -0
  153. data/pgpool2/pgpool.conf +553 -0
  154. data/pgpool2/pgpool.conf.sample +666 -0
  155. data/pgpool2/pgpool.conf.sample-master-slave +665 -0
  156. data/pgpool2/pgpool.conf.sample-replication +664 -0
  157. data/pgpool2/pgpool.conf.sample-stream +664 -0
  158. data/pgpool2/pgpool.spec +264 -0
  159. data/pgpool2/pgpool_adm/TODO +7 -0
  160. data/pgpool2/pgpool_adm/pgpool_adm--1.0.sql +85 -0
  161. data/pgpool2/pgpool_adm/pgpool_adm.c +558 -0
  162. data/pgpool2/pgpool_adm/pgpool_adm.control +5 -0
  163. data/pgpool2/pgpool_adm/pgpool_adm.h +46 -0
  164. data/pgpool2/pgpool_adm/pgpool_adm.sql.in +85 -0
  165. data/pgpool2/pool.h +655 -0
  166. data/pgpool2/pool_auth.c +1390 -0
  167. data/pgpool2/pool_config.c +5007 -0
  168. data/pgpool2/pool_config.h +284 -0
  169. data/pgpool2/pool_config.l +3281 -0
  170. data/pgpool2/pool_config_md5.c +29 -0
  171. data/pgpool2/pool_connection_pool.c +812 -0
  172. data/pgpool2/pool_error.c +242 -0
  173. data/pgpool2/pool_globals.c +27 -0
  174. data/pgpool2/pool_hba.c +1723 -0
  175. data/pgpool2/pool_hba.conf.sample +67 -0
  176. data/pgpool2/pool_ip.c +567 -0
  177. data/pgpool2/pool_ip.h +65 -0
  178. data/pgpool2/pool_ipc.h +38 -0
  179. data/pgpool2/pool_lobj.c +242 -0
  180. data/pgpool2/pool_lobj.h +32 -0
  181. data/pgpool2/pool_memqcache.c +3818 -0
  182. data/pgpool2/pool_memqcache.h +268 -0
  183. data/pgpool2/pool_params.c +163 -0
  184. data/pgpool2/pool_passwd.c +249 -0
  185. data/pgpool2/pool_passwd.h +41 -0
  186. data/pgpool2/pool_path.c +193 -0
  187. data/pgpool2/pool_path.h +81 -0
  188. data/pgpool2/pool_process_context.c +247 -0
  189. data/pgpool2/pool_process_context.h +62 -0
  190. data/pgpool2/pool_process_query.c +5001 -0
  191. data/pgpool2/pool_process_reporting.c +1671 -0
  192. data/pgpool2/pool_process_reporting.h +44 -0
  193. data/pgpool2/pool_proto2.c +671 -0
  194. data/pgpool2/pool_proto_modules.c +3524 -0
  195. data/pgpool2/pool_proto_modules.h +185 -0
  196. data/pgpool2/pool_query_cache.c +1020 -0
  197. data/pgpool2/pool_query_context.c +1871 -0
  198. data/pgpool2/pool_query_context.h +105 -0
  199. data/pgpool2/pool_relcache.c +284 -0
  200. data/pgpool2/pool_relcache.h +78 -0
  201. data/pgpool2/pool_rewrite_outfuncs.c +9060 -0
  202. data/pgpool2/pool_rewrite_query.c +715 -0
  203. data/pgpool2/pool_rewrite_query.h +192 -0
  204. data/pgpool2/pool_select_walker.c +1150 -0
  205. data/pgpool2/pool_select_walker.h +68 -0
  206. data/pgpool2/pool_sema.c +161 -0
  207. data/pgpool2/pool_session_context.c +952 -0
  208. data/pgpool2/pool_session_context.h +203 -0
  209. data/pgpool2/pool_shmem.c +185 -0
  210. data/pgpool2/pool_signal.c +158 -0
  211. data/pgpool2/pool_signal.h +61 -0
  212. data/pgpool2/pool_ssl.c +339 -0
  213. data/pgpool2/pool_stream.c +962 -0
  214. data/pgpool2/pool_stream.h +61 -0
  215. data/pgpool2/pool_system.c +659 -0
  216. data/pgpool2/pool_timestamp.c +1215 -0
  217. data/pgpool2/pool_timestamp.h +38 -0
  218. data/pgpool2/pool_type.h +171 -0
  219. data/pgpool2/pool_worker_child.c +384 -0
  220. data/pgpool2/ps_status.c +404 -0
  221. data/pgpool2/recovery.c +435 -0
  222. data/pgpool2/redhat/pgpool.conf.sample.patch +52 -0
  223. data/pgpool2/redhat/pgpool.init +201 -0
  224. data/pgpool2/redhat/pgpool.sysconfig +7 -0
  225. data/pgpool2/redhat/rpm_installer/basebackup-replication.sh +53 -0
  226. data/pgpool2/redhat/rpm_installer/basebackup-stream.sh +55 -0
  227. data/pgpool2/redhat/rpm_installer/config_for_script +17 -0
  228. data/pgpool2/redhat/rpm_installer/failover.sh +64 -0
  229. data/pgpool2/redhat/rpm_installer/getsources.sh +141 -0
  230. data/pgpool2/redhat/rpm_installer/install.sh +1363 -0
  231. data/pgpool2/redhat/rpm_installer/pgpool_recovery_pitr +47 -0
  232. data/pgpool2/redhat/rpm_installer/pgpool_remote_start +15 -0
  233. data/pgpool2/redhat/rpm_installer/recovery.conf +4 -0
  234. data/pgpool2/redhat/rpm_installer/uninstall.sh +57 -0
  235. data/pgpool2/sample/dist_def_pgbench.sql +73 -0
  236. data/pgpool2/sample/pgpool.pam +3 -0
  237. data/pgpool2/sample/pgpool_recovery +20 -0
  238. data/pgpool2/sample/pgpool_recovery_pitr +19 -0
  239. data/pgpool2/sample/pgpool_remote_start +13 -0
  240. data/pgpool2/sample/replicate_def_pgbench.sql +18 -0
  241. data/pgpool2/sql/insert_lock.sql +15 -0
  242. data/pgpool2/sql/pgpool-recovery/pgpool-recovery.c +280 -0
  243. data/pgpool2/sql/pgpool-recovery/pgpool-recovery.sql.in +19 -0
  244. data/pgpool2/sql/pgpool-recovery/pgpool_recovery--1.0.sql +24 -0
  245. data/pgpool2/sql/pgpool-recovery/pgpool_recovery.control +5 -0
  246. data/pgpool2/sql/pgpool-recovery/uninstall_pgpool-recovery.sql +3 -0
  247. data/pgpool2/sql/pgpool-regclass/pgpool-regclass.c +206 -0
  248. data/pgpool2/sql/pgpool-regclass/pgpool-regclass.sql.in +4 -0
  249. data/pgpool2/sql/pgpool-regclass/pgpool_regclass--1.0.sql +7 -0
  250. data/pgpool2/sql/pgpool-regclass/pgpool_regclass.control +5 -0
  251. data/pgpool2/sql/pgpool-regclass/uninstall_pgpool-regclass.sql +1 -0
  252. data/pgpool2/sql/system_db.sql +38 -0
  253. data/pgpool2/strlcpy.c +85 -0
  254. data/pgpool2/test/C/test_extended.c +98 -0
  255. data/pgpool2/test/jdbc/.cvsignore +2 -0
  256. data/pgpool2/test/jdbc/AutoCommitTest.java +45 -0
  257. data/pgpool2/test/jdbc/BatchTest.java +55 -0
  258. data/pgpool2/test/jdbc/ColumnTest.java +60 -0
  259. data/pgpool2/test/jdbc/CreateTempTableTest.java +48 -0
  260. data/pgpool2/test/jdbc/InsertTest.java +34 -0
  261. data/pgpool2/test/jdbc/LockTest.java +36 -0
  262. data/pgpool2/test/jdbc/PgpoolTest.java +75 -0
  263. data/pgpool2/test/jdbc/README.euc_jp +73 -0
  264. data/pgpool2/test/jdbc/RunTest.java +83 -0
  265. data/pgpool2/test/jdbc/SelectTest.java +37 -0
  266. data/pgpool2/test/jdbc/UpdateTest.java +32 -0
  267. data/pgpool2/test/jdbc/expected/CreateTempTable +1 -0
  268. data/pgpool2/test/jdbc/expected/autocommit +10 -0
  269. data/pgpool2/test/jdbc/expected/batch +1 -0
  270. data/pgpool2/test/jdbc/expected/column +100 -0
  271. data/pgpool2/test/jdbc/expected/insert +1 -0
  272. data/pgpool2/test/jdbc/expected/lock +100 -0
  273. data/pgpool2/test/jdbc/expected/select +2 -0
  274. data/pgpool2/test/jdbc/expected/update +1 -0
  275. data/pgpool2/test/jdbc/pgpool.properties +7 -0
  276. data/pgpool2/test/jdbc/prepare.sql +54 -0
  277. data/pgpool2/test/jdbc/run.sh +6 -0
  278. data/pgpool2/test/parser/.cvsignore +6 -0
  279. data/pgpool2/test/parser/README +32 -0
  280. data/pgpool2/test/parser/expected/copy.out +17 -0
  281. data/pgpool2/test/parser/expected/create.out +64 -0
  282. data/pgpool2/test/parser/expected/cursor.out +37 -0
  283. data/pgpool2/test/parser/expected/delete.out +10 -0
  284. data/pgpool2/test/parser/expected/drop.out +12 -0
  285. data/pgpool2/test/parser/expected/insert.out +13 -0
  286. data/pgpool2/test/parser/expected/misc.out +28 -0
  287. data/pgpool2/test/parser/expected/prepare.out +4 -0
  288. data/pgpool2/test/parser/expected/privileges.out +31 -0
  289. data/pgpool2/test/parser/expected/scanner.out +30 -0
  290. data/pgpool2/test/parser/expected/select.out +89 -0
  291. data/pgpool2/test/parser/expected/transaction.out +38 -0
  292. data/pgpool2/test/parser/expected/update.out +11 -0
  293. data/pgpool2/test/parser/expected/v84.out +37 -0
  294. data/pgpool2/test/parser/expected/v90.out +25 -0
  295. data/pgpool2/test/parser/expected/var.out +22 -0
  296. data/pgpool2/test/parser/input/alter.sql +2 -0
  297. data/pgpool2/test/parser/input/copy.sql +17 -0
  298. data/pgpool2/test/parser/input/create.sql +64 -0
  299. data/pgpool2/test/parser/input/cursor.sql +37 -0
  300. data/pgpool2/test/parser/input/delete.sql +10 -0
  301. data/pgpool2/test/parser/input/drop.sql +12 -0
  302. data/pgpool2/test/parser/input/insert.sql +13 -0
  303. data/pgpool2/test/parser/input/misc.sql +28 -0
  304. data/pgpool2/test/parser/input/prepare.sql +4 -0
  305. data/pgpool2/test/parser/input/privileges.sql +31 -0
  306. data/pgpool2/test/parser/input/scanner.sql +34 -0
  307. data/pgpool2/test/parser/input/select.sql +89 -0
  308. data/pgpool2/test/parser/input/transaction.sql +38 -0
  309. data/pgpool2/test/parser/input/update.sql +11 -0
  310. data/pgpool2/test/parser/input/v84.sql +37 -0
  311. data/pgpool2/test/parser/input/v90.sql +38 -0
  312. data/pgpool2/test/parser/input/var.sql +22 -0
  313. data/pgpool2/test/parser/main.c +96 -0
  314. data/pgpool2/test/parser/parse_schedule +16 -0
  315. data/pgpool2/test/parser/pool.h +13 -0
  316. data/pgpool2/test/parser/run-test +62 -0
  317. data/pgpool2/test/pdo-test/README.euc_jp +58 -0
  318. data/pgpool2/test/pdo-test/SQLlist/test1.sql +3 -0
  319. data/pgpool2/test/pdo-test/SQLlist/test2.sql +3 -0
  320. data/pgpool2/test/pdo-test/collections.inc +11 -0
  321. data/pgpool2/test/pdo-test/def.inc +7 -0
  322. data/pgpool2/test/pdo-test/log.txt +0 -0
  323. data/pgpool2/test/pdo-test/mod/database.inc +36 -0
  324. data/pgpool2/test/pdo-test/mod/def.inc +0 -0
  325. data/pgpool2/test/pdo-test/mod/errorhandler.inc +27 -0
  326. data/pgpool2/test/pdo-test/pdotest.php +11 -0
  327. data/pgpool2/test/pdo-test/regsql.inc +56 -0
  328. data/pgpool2/test/pgpool_setup +898 -0
  329. data/pgpool2/test/regression/README +39 -0
  330. data/pgpool2/test/regression/clean.sh +21 -0
  331. data/pgpool2/test/regression/libs.sh +16 -0
  332. data/pgpool2/test/regression/regress.sh +166 -0
  333. data/pgpool2/test/regression/tests/001.load_balance/test.sh +128 -0
  334. data/pgpool2/test/regression/tests/002.native_replication/PgTester.java +47 -0
  335. data/pgpool2/test/regression/tests/002.native_replication/create.sql +6 -0
  336. data/pgpool2/test/regression/tests/002.native_replication/test.sh +71 -0
  337. data/pgpool2/test/regression/tests/003.failover/expected.r +6 -0
  338. data/pgpool2/test/regression/tests/003.failover/expected.s +6 -0
  339. data/pgpool2/test/regression/tests/003.failover/test.sh +45 -0
  340. data/pgpool2/test/regression/tests/004.watchdog/master.conf +12 -0
  341. data/pgpool2/test/regression/tests/004.watchdog/standby.conf +19 -0
  342. data/pgpool2/test/regression/tests/004.watchdog/test.sh +52 -0
  343. data/pgpool2/test/regression/tests/050.bug58/test.sh +50 -0
  344. data/pgpool2/test/regression/tests/051.bug60/bug.sql +12 -0
  345. data/pgpool2/test/regression/tests/051.bug60/database-clean.sql +6 -0
  346. data/pgpool2/test/regression/tests/051.bug60/database-setup.sql +28 -0
  347. data/pgpool2/test/regression/tests/051.bug60/test.sh +79 -0
  348. data/pgpool2/test/regression/tests/052.do_query/test.sh +44 -0
  349. data/pgpool2/test/regression/tests/053.insert_lock_hangs/test.sh +81 -0
  350. data/pgpool2/test/regression/tests/054.postgres_fdw/test.sh +67 -0
  351. data/pgpool2/test/regression/tests/055.backend_all_down/test.sh +52 -0
  352. data/pgpool2/test/regression/tests/056.bug63/jdbctest2.java +66 -0
  353. data/pgpool2/test/regression/tests/056.bug63/test.sh +47 -0
  354. data/pgpool2/test/regression/tests/057.bug61/test.sh +40 -0
  355. data/pgpool2/test/regression/tests/058.bug68/jdbctest3.java +45 -0
  356. data/pgpool2/test/regression/tests/058.bug68/test.sh +47 -0
  357. data/pgpool2/test/timestamp/expected/insert.out +16 -0
  358. data/pgpool2/test/timestamp/expected/misc.out +3 -0
  359. data/pgpool2/test/timestamp/expected/update.out +6 -0
  360. data/pgpool2/test/timestamp/input/insert.sql +16 -0
  361. data/pgpool2/test/timestamp/input/misc.sql +3 -0
  362. data/pgpool2/test/timestamp/input/update.sql +6 -0
  363. data/pgpool2/test/timestamp/main.c +129 -0
  364. data/pgpool2/test/timestamp/parse_schedule +3 -0
  365. data/pgpool2/test/timestamp/run-test +69 -0
  366. data/pgpool2/version.h +1 -0
  367. data/pgpool2/watchdog/Makefile.am +17 -0
  368. data/pgpool2/watchdog/Makefile.in +505 -0
  369. data/pgpool2/watchdog/test/stab.c +266 -0
  370. data/pgpool2/watchdog/test/test.c +85 -0
  371. data/pgpool2/watchdog/test/wd_child_t.c +87 -0
  372. data/pgpool2/watchdog/test/wd_lifecheck_t.c +87 -0
  373. data/pgpool2/watchdog/test/wd_packet_t.c +87 -0
  374. data/pgpool2/watchdog/test/wd_ping_t.c +20 -0
  375. data/pgpool2/watchdog/watchdog.c +408 -0
  376. data/pgpool2/watchdog/watchdog.h +209 -0
  377. data/pgpool2/watchdog/wd_child.c +444 -0
  378. data/pgpool2/watchdog/wd_ext.h +123 -0
  379. data/pgpool2/watchdog/wd_heartbeat.c +577 -0
  380. data/pgpool2/watchdog/wd_if.c +216 -0
  381. data/pgpool2/watchdog/wd_init.c +126 -0
  382. data/pgpool2/watchdog/wd_interlock.c +347 -0
  383. data/pgpool2/watchdog/wd_lifecheck.c +512 -0
  384. data/pgpool2/watchdog/wd_list.c +429 -0
  385. data/pgpool2/watchdog/wd_packet.c +1159 -0
  386. data/pgpool2/watchdog/wd_ping.c +330 -0
  387. data/pgpool2/ylwrap +223 -0
  388. data/pgsql/presto_client.py +346 -0
  389. data/pgsql/prestogres.py +156 -0
  390. data/pgsql/setup_functions.sql +21 -0
  391. data/pgsql/setup_language.sql +3 -0
  392. data/prestogres.gemspec +23 -0
  393. metadata +496 -0
@@ -0,0 +1,16 @@
1
+ select
2
+ insert
3
+ update
4
+ delete
5
+ misc
6
+ var
7
+ copy
8
+ privileges
9
+ transaction
10
+ cursor
11
+ prepare
12
+ create
13
+ drop
14
+ scanner
15
+ v84
16
+ v90
@@ -0,0 +1,13 @@
1
+ #ifndef POOL_H
2
+ #define POOL_H
3
+
4
+ #include <stdio.h>
5
+ #include <string.h>
6
+
7
+ #define pool_error printf
8
+ #define pool_debug printf
9
+ #define pool_log printf
10
+ #define child_exit exit
11
+
12
+ #endif
13
+
@@ -0,0 +1,62 @@
1
+ #! /usr/bin/env ruby
2
+
3
+ # $Header$
4
+
5
+ #
6
+ # Usage��./run-test schedule
7
+ # ignore a line at the beginning of '#'
8
+ #
9
+
10
+ INPUT_DIRECTORY="input"
11
+ EXPECTED_DIRECTORY="expected"
12
+ RESULT_DIRECTORY="result"
13
+ TEST_PROGRAM="./parser-test"
14
+ DIFF_FILE="test.diff"
15
+
16
+ if ARGV.size != 1
17
+ STDERR.puts "run-test schedule_file"
18
+ exit 1
19
+ end
20
+
21
+ file = ARGV.shift
22
+ if !(File.exists? file)
23
+ STDERR.puts "run-test: file does not exist: #{file}"
24
+ exit 1
25
+ end
26
+
27
+ if !(File.exists? RESULT_DIRECTORY)
28
+ Dir.mkdir RESULT_DIRECTORY
29
+ else
30
+ Dir["#{RESULT_DIRECTORY}/*.out"].each do |f|
31
+ File.unlink f
32
+ end
33
+ end
34
+
35
+ File.unlink DIFF_FILE if File.exists? DIFF_FILE
36
+
37
+ begin
38
+ IO.foreach(file) do |testcase|
39
+ testcase.chomp!
40
+ if (/^\#/ =~ testcase or testcase == "")
41
+ next
42
+ end
43
+
44
+ print "testcase #{testcase}:\t"
45
+ begin
46
+ system("#{TEST_PROGRAM} < #{INPUT_DIRECTORY}/#{testcase}.sql > #{RESULT_DIRECTORY}/#{testcase}.out\n")
47
+
48
+ system("diff -c #{EXPECTED_DIRECTORY}/#{testcase}.out #{RESULT_DIRECTORY}/#{testcase}.out >> #{DIFF_FILE}")
49
+
50
+ if ($? == 0)
51
+ print "OK\n"
52
+ else
53
+ print "FAILED\n"
54
+ end
55
+ rescue
56
+ print "FAILED\n"
57
+ end
58
+ end
59
+
60
+ rescue
61
+ STDERR.puts "NG"
62
+ end
@@ -0,0 +1,58 @@
1
+ pdo-test README
2
+
3
+ -pdo-test�Ȥ�?
4
+
5
+ pdo-test��php PDO�ɥ饤�Ф����Ѥ���pgpool�Υƥ��Ȥ�Ԥ��ץ������
6
+ �Ǥ���
7
+
8
+ pdo-test��ab(Apache HTTP server benchmarking tool)��Ȥ��ƥ��Ȥ��
9
+ ���ޤ���
10
+
11
+ �ºݤμ¹���ϰʲ����̤�Ǥ���
12
+
13
+ abc 10 -n 100 "http://localhost/pdo-test/pdotest.php"
14
+
15
+ PDO�ɥ饤�Ф�pgpool�Ȥ���³�����def.inc�ե�������Խ����ޤ���
16
+ def.inc�����Ƥϰʲ����̤�Ǥ���
17
+ <?php
18
+ /* �ۥ���̾������*/
19
+ define("HOSTNAME","localhost");
20
+ /* DB̾������*/
21
+ define("DBNAME","postgres");
22
+ /* ��³�桼��̾������*/
23
+ define("USER","postgres");
24
+ /* ��³port������*/
25
+ define("PORT","9999");
26
+ /* �ѥ���ɤ�����*/
27
+ define("PASS","");
28
+ ?>
29
+
30
+ �¹Ԥ��륯�����SQLList�ǥ��쥯�ȥ���Υե����뤫��������
31
+ �¹Ԥ���ޤ���
32
+
33
+ �ե�����ˤ�;(���ߥ�����)���ڤ��ʣ����SQL�򵭽Ҥ��Ƥ���������
34
+
35
+ �ޤ�������Υե�����Τ߼¹Ԥ��������ˤϡ��ʲ��Τ褦�˼¹�
36
+ ���ޤ���
37
+
38
+ http://localhost/pdo-test/pdotest.php?query=�ե�����̾
39
+
40
+ PHP�����Ϥ��륨�顼��log.txt�˽��Ϥ���ޤ���
41
+ SQL��٥�Υ��顼�ˤĤ��Ƥ�ab�μ¹Է�̤���ʬ����褦�ˤʤäƤޤ���
42
+
43
+ �ʲ������顼��ȯ����������ab�μ¹Է�̤Ǥ���
44
+ Non-2xx responses��ɽ�����줿���ˤϲ�������DB�˥��顼��ȯ������
45
+ ��ǽ��������Τǡ�log.txt��DB�Υ������ǧ���Ƥ���������
46
+
47
+ oncurrency Level: 10
48
+ Time taken for tests: 7.721773 seconds
49
+ Complete requests: 100
50
+ Failed requests: 0
51
+ Write errors: 0
52
+ Non-2xx responses: 100
53
+ Total transferred: 25100 bytes
54
+ HTML transferred: 5300 bytes
55
+ Requests per second: 12.95 [#/sec] (mean)
56
+ Time per request: 772.177 [ms] (mean)
57
+ Time per request: 77.218 [ms] (mean, across all concurrent requests)
58
+ Transfer rate: 3.11 [Kbytes/sec] received
@@ -0,0 +1,3 @@
1
+ BEGIN;
2
+ SELECT 1;
3
+ END;
@@ -0,0 +1,3 @@
1
+ BEGIN;
2
+ select 2;
3
+ END;
@@ -0,0 +1,11 @@
1
+ <?php
2
+
3
+ function debug($con,$result,$indent,$screen) {
4
+ $str = $indent.$result."......";
5
+ eval ("\$result = $result;");
6
+ if ($screen == 'ON' || $screen == 'on' || $screen == 'On') {
7
+ echo $str.$result."<br>";
8
+ }
9
+ return $result;
10
+ }
11
+ ?>
@@ -0,0 +1,7 @@
1
+ <?php
2
+ define("HOSTNAME","192.168.0.1");
3
+ define("DBNAME","postgres");
4
+ define("USER","postgres");
5
+ define("PORT","9999");
6
+ define("PASS","");
7
+ ?>
File without changes
@@ -0,0 +1,36 @@
1
+
2
+
3
+ <?php
4
+ require_once('def.inc');
5
+ function dbconnect() {
6
+ try {
7
+ $string ="pgsql:host=".HOSTNAME.";port=".PORT.";dbname=".DBNAME;
8
+ $dbh = NULL;
9
+ $dbh = new PDO($string,USER,PASS);
10
+ $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);;
11
+ return $dbh;
12
+ } catch (Exception $e) {
13
+ echo "fail : " .$e->getMessage()." <BR>";
14
+ ErrorResult($php_errormsg);
15
+ return NULL;
16
+ }
17
+ }
18
+
19
+ function trans_end($dbh,$trans) {
20
+ try {
21
+ $stmt = $dbh->prepare($trans);
22
+ $stmt->execute();
23
+ print_r($stmt->fetch());
24
+ } catch (Exception $e) {
25
+ ErrorResult($php_errormsg);
26
+ }
27
+ }
28
+
29
+ function ErrorResult($php_errormsg) {
30
+ header('HTTP/1.0 402 SQL ERROR');
31
+ require_once("errorhandler.inc");
32
+ set_error_handler("userErrorHandler");
33
+ trigger_error($php_errormsg, E_USER_ERROR);
34
+ exit;
35
+ }
36
+ ?>
File without changes
@@ -0,0 +1,27 @@
1
+ <?php
2
+ function userErrorHandler ($errno, $errmsg, $filename, $linenum, $vars) {
3
+ $dt = date("m-d H:i:s");
4
+ $errortype = array (
5
+ 1 => "Error",
6
+ 2 => "Warning",
7
+ 4 => "Parsing Error",
8
+ 8 => "Notice",
9
+ 16 => "Core Error",
10
+ 32 => "Core Warning",
11
+ 64 => "Compile Error",
12
+ 128 => "Compile Warning",
13
+ 256 => "User Error",
14
+ 512 => "User Warning",
15
+ 1024=> "User Notice"
16
+ );
17
+ $err = $dt." ";
18
+ $err .= $errortype[$error]." ";
19
+ $err .= $errmsg." ";
20
+ $err .= $filename." ";
21
+ $err .= $linenum."\n";
22
+ $filename='log.txt';
23
+ $handle = fopen($filename, 'a');
24
+ fwrite($handle, $err);
25
+ fclose($handle);
26
+ }
27
+ ?>
@@ -0,0 +1,11 @@
1
+ <?php
2
+ require_once('def.inc');
3
+ require_once('regsql.inc');
4
+ ini_set("track_errors", "1");
5
+ error_reporting(0);
6
+ $trans = NULL;
7
+ if (isset($_GET["query"])) {
8
+ $trans=$_GET["query"];
9
+ }
10
+ dosql($trans);
11
+ ?>
@@ -0,0 +1,56 @@
1
+ <?php
2
+ require_once("def.inc");
3
+ require_once("mod/database.inc");
4
+ require_once("collections.inc");
5
+
6
+ function getfiles( $dir )
7
+ {
8
+ $tree = array();
9
+
10
+ if( $handle = opendir( $dir ) )
11
+ {
12
+ $i = 0;
13
+ while ( false !== $file = readdir( $handle ) )
14
+ {
15
+ if( $file != "." && $file != ".." )
16
+ {
17
+ $tree[$i] = $file;
18
+ $i++;
19
+ }
20
+ }
21
+ closedir( $handle );
22
+ uasort( $tree, "strcmp" );
23
+ }
24
+ return $tree;
25
+ }
26
+
27
+ function dosql($trans) {
28
+ $context = NULL;
29
+
30
+ if($trans)
31
+ {
32
+ $file = "SQLlist/".$trans;
33
+ if(is_file($file))
34
+ {
35
+ $context=file_get_contents($file);
36
+ }
37
+ }
38
+
39
+ if(!$context)
40
+ {
41
+ $files = getfiles("SQLlist");
42
+ $files_num = count($files) -1;
43
+ $num = rand(0,$files_num);
44
+ $context=file_get_contents("SQLlist/".$files[$num]);
45
+ }
46
+ $sqlarray = explode(";",$context);
47
+ $con = dbconnect();
48
+
49
+ for($i = 0; $i<count($sqlarray) -1; $i++)
50
+ {
51
+ $sql = $sqlarray[$i];
52
+ echo $sql."<BR>";
53
+ trans_end($con,$sql);
54
+ }
55
+ }
56
+ ?>
@@ -0,0 +1,898 @@
1
+ #! /bin/sh
2
+ # Copyright (c) 2013 PgPool Global Development Group
3
+ #
4
+ # Permission to use, copy, modify, and distribute this software and
5
+ # its documentation for any purpose and without fee is hereby
6
+ # granted, provided that the above copyright notice appear in all
7
+ # copies and that both that copyright notice and this permission
8
+ # notice appear in supporting documentation, and that the name of the
9
+ # author not be used in advertising or publicity pertaining to
10
+ # distribution of the software without specific, written prior
11
+ # permission. The author makes no representations about the
12
+ # suitability of this software for any purpose. It is provided "as
13
+ # is" without express or implied warranty.
14
+ #-------------------------------------------------------------------
15
+ # Set up pgpool-II and PostgreSQL temporary installation in current
16
+ # directory for *testing* purpose.
17
+ # Do not use this tool for production environment!
18
+ #
19
+ # usage: pgpool_setup [-m r|s][-n num_clusters][-p base_port][--no-stop]
20
+ # -m s: create an installation as streaming replication mode.
21
+ # (the default)
22
+ # -m r: create an installation as native replication mode.
23
+ # -n num_clusters: create num_clusters PostgreSQL database cluster nodes
24
+ # -p base_port: specify base port. The first PostgreSQL node's port is
25
+ # base_port. Second PostgreSQL node's port is base_port+1... nth
26
+ # PostgreSQL node's port is base_port+n-1, pgpool port is
27
+ # base_port+n, pcp port is base_port+n+1.
28
+ # --no-stop: do not stop pgpool and PostgreSQL after the work
29
+ #
30
+ # The user run this script will become the PostgreSQL super user as
31
+ # well. Current directory must be empty. Assume that appropreate
32
+ # pgpool and PostgreSQL binaries are in the command search path.
33
+ # The user must have passwordless access to localhost over SSH.
34
+ #
35
+ # Rayout after executing this script:
36
+ # data[0-]: PostgreSQL database clusters
37
+ # log: pgpool.log and pgpool_status resides here
38
+ # run: pgpool-II pid file resides here(generated by pgpool-II)
39
+ # etc/pgpool.conf: pgpool-II configuration file
40
+ # etc/pool_passwd: generated by pgpool-II
41
+ # ./startall: a script to start pgpool-II and all PostgreSQL servers
42
+ # ./shutdownall: a script to shutdown pgpool-II and all PostgreSQL servers
43
+ #
44
+ # test database "test" is created.
45
+ # pcp username and password is set to the person who executed this script.
46
+ #
47
+ #-------------------------------------------
48
+ # Configuration section
49
+ #-------------------------------------------
50
+ # Starting port number to be used. Each PostgreSQL is assigned
51
+ # $BASEPORT, $BASEPORT+1 and so on.
52
+ # pgpool port and pcp_port will be assigned afterwards.
53
+ BASEPORT=11000
54
+ # Default number of PostgreSQL database clusters
55
+ NUMCLUSTERS=2
56
+ # Where to look for pgpool.conf.sample*
57
+ PGPOOL_INSTALL_DIR=${PGPOOL_INSTALL_DIR:-"/usr/local"}
58
+ PGPOOLDIR=$PGPOOL_INSTALL_DIR/etc
59
+ # PostgreSQL commands(initdb, pg_ctl, psql) install dir
60
+ PGBIN=${PGBIN:-"/usr/local/pgsql/bin"}
61
+ # LD_LIBRARY_PATH
62
+ LPATH=/usr/local/pgsql/lib
63
+ # initdb args
64
+ INITDBARG="--no-locale -E UTF_8"
65
+ #-------------------------------------------
66
+ # End of configuration section
67
+ #-------------------------------------------
68
+ #
69
+ # user name
70
+ WHOAMI=`whoami`
71
+
72
+ # our root directory
73
+ BASEDIR=`pwd`
74
+
75
+ # PostgreSQL bin directory
76
+ INITDB=$PGBIN/initdb
77
+ PG_CTL=$PGBIN/pg_ctl
78
+ PSQL=$PGBIN/psql
79
+
80
+ # pgpool-II configuration file localtion.
81
+ CONF=$BASEDIR/etc/pgpool.conf
82
+ # failover script
83
+ FAILOVER_SCRIPT=$BASEDIR/etc/failover.sh
84
+ # follow master script
85
+ FOLLOW_MASTER_SCRIPT=$BASEDIR/etc/follow_master.sh
86
+ # pgpool_remote_start
87
+ PGPOOL_REMOTE_START_SCRIPT=pgpool_remote_start
88
+ # Start script name. This will be generated in this script.
89
+ STARTALL=$BASEDIR/startall
90
+ # Shutdown script name. This will be generated in this script.
91
+ SHUTDOWNALL=$BASEDIR/shutdownall
92
+ # pgpool reload script name. This will be generated in this script.
93
+ PGPOOL_RELOAD=$BASEDIR/pgpool_reload
94
+
95
+ #-------------------------------------------
96
+ # create failover script
97
+ #-------------------------------------------
98
+ function create_failover_script()
99
+ {
100
+ cat >> $FAILOVER_SCRIPT <<'EOF'
101
+ #! /bin/sh
102
+ # Execute command by failover.
103
+ # special values: %d = node id
104
+ # %h = host name
105
+ # %p = port number
106
+ # %D = database cluster path
107
+ # %m = new master node id
108
+ # %M = old master node id
109
+ # %H = new master node host name
110
+ # %P = old primary node id
111
+ # %R = new master database cluster path
112
+ # %r = new master port number
113
+ # %% = '%' character
114
+ failed_node_id=$1
115
+ failed_host_name=$2
116
+ failed_port=$3
117
+ failed_db_cluster=$4
118
+ new_master_id=$5
119
+ old_master_id=$6
120
+ new_master_host_name=$7
121
+ old_primary_node_id=$8
122
+ new_master_port_number=$9
123
+ new_master_db_cluster=${10}
124
+ mydir=__MYDIR__
125
+ log=$mydir/log/failover.log
126
+ pg_ctl=__PGBIN__/pg_ctl
127
+ cluster0=$mydir/data0
128
+ cluster1=$mydir/data1
129
+
130
+ date >> $log
131
+ echo "failed_node_id $failed_node_id failed_host_name $failed_host_name failed_port $failed_port failed_db_cluster $failed_db_cluster new_master_id $new_master_id old_master_id $old_master_id new_master_host_name $new_master_host_name old_primary_node_id $old_primary_node_id new_master_port_number $new_master_port_number new_master_db_cluster $new_master_db_cluster" >> $log
132
+
133
+ if [ a"$failed_node_id" = a"$old_primary_node_id" ];then # master failed
134
+ if [ a"$failed_node_id" = a"0" ];then
135
+ echo $pg_ctl -D $cluster1 promote >>$log # let standby take over
136
+ $pg_ctl -D $cluster1 promote >>$log # let standby take over
137
+ else
138
+ echo $pg_ctl -D $cluster0 promote >>$log # let standby take over
139
+ $pg_ctl -D $cluster0 promote >>$log # let standby take over
140
+ fi
141
+ fi
142
+ EOF
143
+
144
+ #-------------------------------------------
145
+ # replace some variables in the script
146
+ #-------------------------------------------
147
+ /bin/ed $FAILOVER_SCRIPT <<EOF
148
+ /__MYDIR__/s@__MYDIR__@$BASEDIR@
149
+ /__PGBIN__/s@__PGBIN__@$PGBIN@
150
+ w
151
+ q
152
+ EOF
153
+
154
+ chmod 755 $FAILOVER_SCRIPT
155
+ }
156
+
157
+ #-------------------------------------------
158
+ # create follow master script
159
+ #-------------------------------------------
160
+ function create_follow_master_script()
161
+ {
162
+ cat >> $FOLLOW_MASTER_SCRIPT <<'EOF'
163
+ #! /bin/sh
164
+ # Execute command by failover.
165
+ # special values: %d = node id
166
+ # %h = host name
167
+ # %p = port number
168
+ # %D = database cluster path
169
+ # %m = new master node id
170
+ # %M = old master node id
171
+ # %H = new master node host name
172
+ # %P = old primary node id
173
+ # %R = new master database cluster path
174
+ # %r = new master port number
175
+ # %% = '%' character
176
+ failed_node_id=$1
177
+ failed_host_name=$2
178
+ failed_port=$3
179
+ failed_db_cluster=$4
180
+ new_master_id=$5
181
+ old_master_id=$6
182
+ new_master_host_name=$7
183
+ old_primary_node_id=$8
184
+ new_master_port_number=$9
185
+ new_master_db_cluster=${10}
186
+ mydir=__MYDIR__
187
+ log=$mydir/log/failover.log
188
+ pg_ctl=__PGBIN__/pg_ctl
189
+ cluster0=$mydir/data0
190
+ cluster1=$mydir/data1
191
+ cluster2=$mydir/data2
192
+ PCP_PORT=__PCPPORT__
193
+ pcp_super_user=__PCPSUPERUSER__
194
+
195
+ date >> $log
196
+ echo "failed_node_id $failed_node_id failed_host_name $failed_host_name failed_port $failed_port failed_db_cluster $failed_db_cluster new_master_id $new_master_id old_master_id $old_master_id new_master_host_name $new_master_host_name old_primary_node_id $old_primary_node_id new_master_port_number $new_master_port_number new_master_db_cluster $new_master_db_cluster" >> $log
197
+
198
+ # Stop standby node
199
+ $pg_ctl -w -m f -D $failed_db_cluster stop >> $log 2>&1
200
+ sleep 10
201
+ # recovery the node
202
+ pcp_recovery_node 1 localhost $PCP_PORT $pcp_super_user $pcp_super_user $failed_node_id >> $log 2>&1
203
+
204
+ EOF
205
+
206
+ #-------------------------------------------
207
+ # replace some variables in the script
208
+ #-------------------------------------------
209
+ /bin/ed $FOLLOW_MASTER_SCRIPT <<EOF
210
+ /__MYDIR__/s@__MYDIR__@$BASEDIR@
211
+ /__PGBIN__/s@__PGBIN__@$PGBIN@
212
+ /__PCPSUPERUSER__/s/__PCPSUPERUSER__/$WHOAMI/
213
+ /__PCPPORT__/s/__PCPPORT__/$PCP_PORT/
214
+ w
215
+ q
216
+ EOF
217
+
218
+ chmod 755 $FOLLOW_MASTER_SCRIPT
219
+ }
220
+
221
+ #-------------------------------------------
222
+ # create pgpool_remote_start script
223
+ # argument: PostgreSQL database cluster directory
224
+ #-------------------------------------------
225
+ function create_pgpool_remote_start_script()
226
+ {
227
+ cat >> $1/$PGPOOL_REMOTE_START_SCRIPT <<'EOF'
228
+ #! /bin/sh
229
+ #
230
+ # start postmaster on the recoveried node
231
+ #
232
+ if [ $# -ne 2 ]
233
+ then
234
+ echo "pgpool_remote_start remote_host remote_datadir"
235
+ exit 1
236
+ fi
237
+
238
+ DEST=$1
239
+ DESTDIR=$2
240
+ PGCTL=__PGBIN__/pg_ctl
241
+
242
+ ssh -T $DEST $PGCTL -w -D $DESTDIR start 2>/dev/null 1>/dev/null < /dev/null &
243
+ EOF
244
+
245
+ #-------------------------------------------
246
+ # replace some variables in the script
247
+ #-------------------------------------------
248
+ /bin/ed $1/$PGPOOL_REMOTE_START_SCRIPT <<EOF
249
+ /__PGBIN__/s@__PGBIN__@$PGBIN@
250
+ w
251
+ q
252
+ EOF
253
+
254
+ chmod 755 $1/$PGPOOL_REMOTE_START_SCRIPT
255
+
256
+ }
257
+
258
+ #-------------------------------------------
259
+ # set postgresql.conf
260
+ # argument: PostgreSQL database cluster directory
261
+ #-------------------------------------------
262
+ function set_postgresql_conf
263
+ {
264
+ PGCONF=$1/postgresql.conf
265
+
266
+ echo "listen_addresses = '*'" >> $PGCONF
267
+ echo "port = $PORT" >> $PGCONF
268
+ echo "logging_collector = on" >> $PGCONF
269
+ echo "log_filename = '%A.log'" >> $PGCONF
270
+ echo "log_line_prefix = '%p %t '" >> $PGCONF
271
+ echo "log_truncate_on_rotation = on" >> $PGCONF
272
+ echo "log_statement = 'all'" >> $PGCONF
273
+ echo "max_prepared_transactions = 10" >> $PGCONF
274
+
275
+ if [ $MODE = "s" ];then
276
+ echo "hot_standby = on" >> $PGCONF
277
+ echo "wal_level = hot_standby" >> $PGCONF
278
+ echo "max_wal_senders = 2" >> $PGCONF
279
+ echo "archive_mode = on" >> $PGCONF
280
+ echo "archive_command = 'cp %p $BASEDIR/archivedir/%f </dev/null'" >> $PGCONF
281
+ else
282
+ echo "wal_level = archive" >> $PGCONF
283
+ echo "archive_mode = on" >> $PGCONF
284
+ echo "archive_command = 'cp %p $BASEDIR/archivedir/%f </dev/null'" >> $PGCONF
285
+ fi
286
+
287
+ ed $1/pg_hba.conf <<EOF
288
+ /^#local *replication/s/^#//p
289
+ /^#host *replication/s/^#//p
290
+ /^#host *replication/s/^#//p
291
+ w
292
+ q
293
+ EOF
294
+
295
+ }
296
+
297
+ #-------------------------------------------
298
+ # create basebackup.sh for streaming replication mode
299
+ # argument: PostgreSQL database cluster directory
300
+ #-------------------------------------------
301
+ function create_basebackup_stream {
302
+ SCRIPT=basebackup.sh
303
+ cat >> $1/$SCRIPT <<'EOF'
304
+ #! /bin/sh
305
+ psql=__PGBIN__/psql
306
+ DATA0_PORT=__DATA0_PORT__
307
+ DATA1_PORT=`expr $DATA0_PORT + 1`
308
+ DATA2_PORT=`expr $DATA1_PORT + 1`
309
+ DATADIR_BASE=__DATADIR_BASE__
310
+ DATA0_DIR=${DATADIR_BASE}"/data0"
311
+ DATA1_DIR=${DATADIR_BASE}"/data1"
312
+ DATA2_DIR=${DATADIR_BASE}"/data2"
313
+ PGSUPERUSER=__PGSUPERUSER__
314
+
315
+ master_db_cluster=$1
316
+ recovery_node_host_name=$2
317
+ DEST_CLUSTER=$3
318
+
319
+ log=$DATADIR_BASE/log/recovery.log
320
+
321
+ if [ $master_db_cluster = $DATA0_DIR ];then
322
+ PORT=$DATA0_PORT
323
+ SOURCE_CLUSTER=$DATA0_DIR
324
+ elif [ $master_db_cluster = $DATA1_DIR ];then
325
+ PORT=$DATA1_PORT
326
+ SOURCE_CLUSTER=$DATA1_DIR
327
+ else
328
+ PORT=$DATA2_PORT
329
+ SOURCE_CLUSTER=$DATA2_DIR
330
+ fi
331
+
332
+ $psql -p $PORT -c "SELECT pg_start_backup('Streaming Replication', true)" postgres
333
+
334
+ echo "source: $SOURCE_CLUSTER dest: $DEST_CLUSTER" > $log
335
+
336
+ rsync -C -a -c --delete --exclude postgresql.conf --exclude postmaster.pid \
337
+ --exclude postmaster.opts --exclude pg_log \
338
+ --exclude recovery.conf --exclude recovery.done \
339
+ --exclude pg_xlog \
340
+ $SOURCE_CLUSTER/ $DEST_CLUSTER/
341
+
342
+ rm -fr $DEST_CLUSTER/pg_xlog
343
+ mkdir $DEST_CLUSTER/pg_xlog
344
+ chmod 700 $DEST_CLUSTER/pg_xlog
345
+ rm $DEST_CLUSTER/recovery.done
346
+ cat > $DEST_CLUSTER/recovery.conf <<REOF
347
+ standby_mode = 'on'
348
+ primary_conninfo = 'port=$PORT user=$PGSUPERUSER'
349
+ recovery_target_timeline='latest'
350
+ REOF
351
+
352
+ $psql -p $PORT -c "SELECT pg_stop_backup()" postgres
353
+ EOF
354
+
355
+ #-------------------------------------------
356
+ # replace some variables in the script
357
+ #-------------------------------------------
358
+ /bin/ed $1/$SCRIPT <<EOF
359
+ /__PGBIN__/s@__PGBIN__@$PGBIN@
360
+ /__DATA0_PORT__/s/__DATA0_PORT__/$BASEPORT/
361
+ /__DATADIR_BASE__/s@__DATADIR_BASE__@$BASEDIR@
362
+ /__PGSUPERUSER__/s/__PGSUPERUSER__/$WHOAMI/
363
+ w
364
+ q
365
+ EOF
366
+
367
+ chmod 755 $1/$SCRIPT
368
+
369
+ }
370
+
371
+ #-------------------------------------------
372
+ # create basebackup.sh for native replication mode
373
+ # argument: PostgreSQL database cluster directory
374
+ #-------------------------------------------
375
+ function create_basebackup_replication {
376
+ SCRIPT=basebackup.sh
377
+ cat >> $1/$SCRIPT <<'EOF'
378
+ #! /bin/sh
379
+ psql=__PGBIN__/psql
380
+ DATA0_PORT=__DATA0_PORT__
381
+ DATA1_PORT=`expr $DATA0_PORT + 1`
382
+ DATA2_PORT=`expr $DATA1_PORT + 1`
383
+ DATADIR_BASE=__DATADIR_BASE__
384
+ DATA0_DIR=${DATADIR_BASE}"/data0"
385
+ DATA1_DIR=${DATADIR_BASE}"/data1"
386
+ DATA2_DIR=${DATADIR_BASE}"/data2"
387
+ PGSUPERUSER=__PGSUPERUSER__
388
+
389
+ master_db_cluster=$1
390
+ recovery_node_host_name=$2
391
+ DEST_CLUSTER=$3
392
+
393
+ log=$DATADIR_BASE/log/recovery.log
394
+
395
+ if [ $master_db_cluster = $DATA0_DIR ];then
396
+ PORT=$DATA0_PORT
397
+ SOURCE_CLUSTER=$DATA0_DIR
398
+ elif [ $master_db_cluster = $DATA1_DIR ];then
399
+ PORT=$DATA1_PORT
400
+ SOURCE_CLUSTER=$DATA1_DIR
401
+ else
402
+ PORT=$DATA2_PORT
403
+ SOURCE_CLUSTER=$DATA2_DIR
404
+ fi
405
+
406
+ $psql -p $PORT -c "SELECT pg_start_backup('Native Replication', true)" postgres
407
+
408
+ echo "source: $SOURCE_CLUSTER dest: $DEST_CLUSTER" > $log
409
+
410
+ cat > $SOURCE_CLUSTER/recovery.conf <<REOF
411
+ restore_command = 'cp __ARCHDIR__/%f %p'
412
+ REOF
413
+
414
+ rsync -C -a -c --delete --exclude postgresql.conf --exclude postmaster.pid \
415
+ --exclude postmaster.opts --exclude pg_log \
416
+ --exclude recovery.done \
417
+ --exclude pg_xlog \
418
+ $SOURCE_CLUSTER/ $DEST_CLUSTER/
419
+
420
+ rm -fr $DEST_CLUSTER/pg_xlog
421
+ mkdir $DEST_CLUSTER/pg_xlog
422
+ chmod 700 $DEST_CLUSTER/pg_xlog
423
+
424
+ $psql -p $PORT -c "SELECT pg_stop_backup()" postgres
425
+ EOF
426
+
427
+ #-------------------------------------------
428
+ # replace some variables in the script
429
+ #-------------------------------------------
430
+ /bin/ed $1/$SCRIPT <<EOF
431
+ /__PGBIN__/s@__PGBIN__@$PGBIN@
432
+ /__DATA0_PORT__/s/__DATA0_PORT__/$BASEPORT/
433
+ /__DATADIR_BASE__/s@__DATADIR_BASE__@$BASEDIR@
434
+ /__PGSUPERUSER__/s/__PGSUPERUSER__/$WHOAMI/
435
+ /__ARCHDIR__/s@__ARCHDIR__@$BASEDIR/archivedir@p
436
+ w
437
+ q
438
+ EOF
439
+
440
+ chmod 755 $1/$SCRIPT
441
+
442
+ }
443
+
444
+ #-------------------------------------------
445
+ # create pgpool_recovery_pitr (2nd stage script)for native replication mode
446
+ # argument: PostgreSQL database cluster directory
447
+ #-------------------------------------------
448
+ function create_pgpool_recovery_pitr {
449
+ SCRIPT=pgpool_recovery_pitr
450
+ cat >> $1/$SCRIPT <<'EOF'
451
+ #! /bin/sh
452
+ psql=__PGBIN__/psql
453
+ DATA0_PORT=__DATA0_PORT__
454
+ DATA1_PORT=`expr $DATA0_PORT + 1`
455
+ DATA2_PORT=`expr $DATA1_PORT + 1`
456
+ DATADIR_BASE=__DATADIR_BASE__
457
+ DATA0_DIR=${DATADIR_BASE}"/data0"
458
+ DATA1_DIR=${DATADIR_BASE}"/data1"
459
+ DATA2_DIR=${DATADIR_BASE}"/data2"
460
+ PGSUPERUSER=__PGSUPERUSER__
461
+
462
+ master_db_cluster=$1
463
+ recovery_node_host_name=$2
464
+ DEST_CLUSTER=$3
465
+
466
+ log=$DATADIR_BASE/log/recovery.log
467
+
468
+ if [ $master_db_cluster = $DATA0_DIR ];then
469
+ PORT=$DATA0_PORT
470
+ SOURCE_CLUSTER=$DATA0_DIR
471
+ elif [ $master_db_cluster = $DATA1_DIR ];then
472
+ PORT=$DATA1_PORT
473
+ SOURCE_CLUSTER=$DATA1_DIR
474
+ else
475
+ PORT=$DATA2_PORT
476
+ SOURCE_CLUSTER=$DATA2_DIR
477
+ fi
478
+
479
+ # Force to flush current value of sequences to xlog
480
+ $psql -p $PORT -t -c 'SELECT datname FROM pg_database WHERE NOT datistemplate AND datallowconn' template1|
481
+ while read i
482
+ do
483
+ if [ "$i" != "" ];then
484
+ $psql -p $PORT -c "SELECT setval(oid, nextval(oid)) FROM pg_class WHERE relkind = 'S'" $i
485
+ fi
486
+ done
487
+
488
+ $psql -p $PORT -c "SELECT pgpool_switch_xlog('__ARCHDIR__')" template1
489
+ EOF
490
+ #-------------------------------------------
491
+ # replace some variables in the script
492
+ #-------------------------------------------
493
+ /bin/ed $1/$SCRIPT <<EOF
494
+ /__PGBIN__/s@__PGBIN__@$PGBIN@p
495
+ /__DATA0_PORT__/s/__DATA0_PORT__/$BASEPORT/p
496
+ /__DATADIR_BASE__/s@__DATADIR_BASE__@$BASEDIR@p
497
+ /__PGSUPERUSER__/s/__PGSUPERUSER__/$WHOAMI/p
498
+ /__ARCHDIR__/s@__ARCHDIR__@$BASEDIR/archivedir@p
499
+ w
500
+ q
501
+ EOF
502
+
503
+ chmod 755 $1/$SCRIPT
504
+
505
+ }
506
+
507
+ #-------------------------------------------
508
+ # create initial recovery.conf
509
+ # argument1: PostgreSQL database cluster directory
510
+ # argument2: cluster No. we assume that data0 is primary
511
+ #-------------------------------------------
512
+ function create_recovery_conf {
513
+ if [ $2 = "0" ];then
514
+ fname=recovery.done
515
+ else
516
+ fname=recovery.conf
517
+ fi
518
+
519
+ cat > $1/$fname <<EOF
520
+ standby_mode = 'on'
521
+ primary_conninfo = 'port=$BASEPORT user=$WHOAMI'
522
+ recovery_target_timeline='latest'
523
+ restore_command = 'cp $BASEDIR/archivedir/pg_xlog/%f "%p" 2> /dev/null'
524
+ EOF
525
+ }
526
+
527
+ #-------------------------------------------
528
+ # set pgpool.conf
529
+ # argument: absolute path to pgpool.conf
530
+ #-------------------------------------------
531
+ function set_pgpool_conf {
532
+ echo "sr_check_user = '$WHOAMI'" >> $CONF
533
+ echo "recovery_user = '$WHOAMI'" >> $CONF
534
+ echo "recovery_password = ''" >> $CONF
535
+ echo "recovery_1st_stage_command = 'basebackup.sh'" >> $CONF
536
+
537
+ if [ $MODE = "r" ];then
538
+ echo "recovery_2nd_stage_command = 'pgpool_recovery_pitr'" >> $CONF
539
+ fi
540
+
541
+ echo "health_check_period = 10" >> $CONF
542
+ echo "health_check_user = '$WHOAMI'" >> $CONF
543
+ OIDDIR=$BASEDIR/log/pgpool/oiddir
544
+ mkdir -p $OIDDIR
545
+ echo "memqcache_oiddir = '$OIDDIR'" >> $CONF
546
+ echo "log_per_node_statement = on" >> $CONF
547
+
548
+ if [ $MODE = "s" ];then
549
+ echo "failover_command = '$FAILOVER_SCRIPT %d %h %p %D %m %M %H %P %r %R'" >> $CONF
550
+ fi
551
+ }
552
+
553
+ #-------------------------------------------
554
+ # wait for pgpool comes up
555
+ #-------------------------------------------
556
+ function wait_for_pgpool_startup {
557
+ timeout=20
558
+
559
+ while [ $timeout -gt 0 ]
560
+ do
561
+ $PSQL -p $PGPOOL_PORT -c "show pool_nodes" test >/dev/null 2>&1
562
+ if [ $? = 0 ];then
563
+ break;
564
+ fi
565
+ timeout=`expr $timeout - 1`
566
+ done
567
+ }
568
+
569
+ #-------------------------------------------
570
+ # wait for pgpool reload finished
571
+ #-------------------------------------------
572
+ function wait_for_pgpool_reload {
573
+ timeout=20
574
+ num_node=$1
575
+
576
+ while [ $timeout -gt 0 ]
577
+ do
578
+ N=`$PSQL -p $PGPOOL_PORT -c "show pool_status" test | grep backend_data | wc -l`
579
+ if [ $N = $num_node ];then
580
+ break;
581
+ fi
582
+ timeout=`expr $timeout - 1`
583
+ done
584
+ }
585
+
586
+ #################################################################################
587
+ #
588
+ # main script
589
+ #
590
+ ################################################################################
591
+ function usage()
592
+ {
593
+ echo "usage: $0 [-m r|s] [-n num_clusters] [-p base_port] [--no-stop] ";exit 1
594
+ }
595
+
596
+ #-------------------------------------------
597
+ # Argument check
598
+ # usage: $0 [-m r|s] [-n num_clusters] [-p base_port] [--no-stop]"
599
+ #-------------------------------------------
600
+ #
601
+ # default mode is streaming replication mode
602
+ MODE="s"
603
+ NO_STOP="false"
604
+
605
+ while [ $# -gt 0 ]
606
+ do
607
+ if [ $1 = "-m" ];then
608
+ shift
609
+ case $1 in
610
+ r ) MODE="r";;
611
+ s ) MODE="s";;
612
+ * ) usage;;
613
+ esac
614
+ elif [ $1 = "-n" ];then
615
+ shift
616
+ NUMCLUSTERS=$1
617
+ elif [ $1 = "-p" ];then
618
+ shift
619
+ BASEPORT=$1
620
+ elif [ $1 = "--no-stop" ];then
621
+ shift
622
+ NO_STOP="true"
623
+ elif [ $1 = "--help" -o $1 = "-o" ];then
624
+ usage
625
+ exit
626
+ else
627
+ usage
628
+ exit
629
+ fi
630
+ shift
631
+ done
632
+
633
+ case $MODE in
634
+ r) MODENAME="native replication mode"
635
+ SAMPLE_CONF=$PGPOOLDIR/pgpool.conf.sample-replication
636
+ ;;
637
+ s ) MODENAME="streaming replication mode"
638
+ SAMPLE_CONF=$PGPOOLDIR/pgpool.conf.sample-stream
639
+ ;;
640
+ esac
641
+
642
+ #-------------------------------------------
643
+ # Make sure that current directory is empty
644
+ #-------------------------------------------
645
+ if [ "`/bin/ls`" != "" ]
646
+ then
647
+ echo "$0: Current directory is not empty. Please remove files and directories then try again."
648
+ exit 1
649
+ fi
650
+
651
+ exec 5> $BASEDIR/pgpool_setup.log
652
+
653
+ #-------------------------------------------
654
+ # everything looks good. starting setup...
655
+ #-------------------------------------------
656
+ echo "Satrting set up in $MODENAME"
657
+
658
+ #-------------------------------------------
659
+ # install pgpool.conf
660
+ #-------------------------------------------
661
+ test ! -d etc && mkdir etc
662
+ cp $SAMPLE_CONF $CONF
663
+
664
+ #-------------------------------------------
665
+ # create startall, shutdownall and pgpool_reload
666
+ #-------------------------------------------
667
+ echo "creating startall and shutdownall"
668
+ echo "LD_LIBRARY_PATH=$LPATH" > $STARTALL
669
+ echo 'dir=`pwd`' >> $STARTALL
670
+ echo "PGPOOL_INSTALL_DIR=$PGPOOL_INSTALL_DIR" >> $STARTALL
671
+ chmod 755 $STARTALL
672
+ echo 'dir=`pwd`' > $SHUTDOWNALL
673
+ echo "PGPOOL_INSTALL_DIR=$PGPOOL_INSTALL_DIR" >> $SHUTDOWNALL
674
+ echo '$PGPOOL_INSTALL_DIR/bin/pgpool -f $dir/etc/pgpool.conf -m f stop' >> $SHUTDOWNALL
675
+ chmod 755 $SHUTDOWNALL
676
+ echo 'dir=`pwd`' > $PGPOOL_RELOAD
677
+ echo "PGPOOL_INSTALL_DIR=$PGPOOL_INSTALL_DIR" >> $PGPOOL_RELOAD
678
+ echo '$PGPOOL_INSTALL_DIR/bin/pgpool -f $dir/etc/pgpool.conf reload' >> $PGPOOL_RELOAD
679
+ chmod 755 $PGPOOL_RELOAD
680
+
681
+ #-------------------------------------------
682
+ # create failover script
683
+ #-------------------------------------------
684
+ echo "creating failover script"
685
+ create_failover_script >&5 2>&1
686
+
687
+ #-------------------------------------------
688
+ # create each PostgreSQL cluster
689
+ #-------------------------------------------
690
+ n=0
691
+ while [ $n -lt $NUMCLUSTERS ]
692
+ do
693
+ CLUSTER="data"`expr $n`
694
+ CLUSTERDIR=$BASEDIR/$CLUSTER
695
+ PORT=`expr $BASEPORT + $n`
696
+
697
+ echo -n "creating database cluster $CLUSTERDIR..."
698
+ $INITDB -D $CLUSTERDIR $INITDBARG >&5 2>&1
699
+ echo "done."
700
+
701
+ # set postgresql.conf
702
+ echo "update postgreql.conf"
703
+ set_postgresql_conf $CLUSTERDIR >&5 2>&1
704
+
705
+ # create pgpool_remote_start script under cluster directory
706
+ echo "creating pgpool_remote_start"
707
+ create_pgpool_remote_start_script $CLUSTERDIR >&5 2>&1
708
+
709
+ echo "creating basebackup.sh"
710
+ # create basebackup.sh
711
+ if [ $MODE = 's' ];then
712
+ create_basebackup_stream $CLUSTERDIR >&5 2>&1
713
+ else
714
+ create_basebackup_replication $CLUSTERDIR >&5 2>&1
715
+ create_pgpool_recovery_pitr $CLUSTERDIR >&5 2>&1
716
+ fi
717
+
718
+ # create recovery.conf or recovery.done if streaming replication
719
+ # mode
720
+ if [ $MODE = "s" ];then
721
+ echo "creating recovery.conf"
722
+ create_recovery_conf $CLUSTERDIR $n >&5 2>&1
723
+ fi
724
+
725
+ echo "$PG_CTL -D $CLUSTERDIR -m f stop" >> $SHUTDOWNALL
726
+ echo "$PG_CTL -w -D $CLUSTERDIR start" >> $STARTALL
727
+
728
+ n=`expr $n + 1`
729
+
730
+ echo "#$n port is $PORT" >> README.port
731
+
732
+ done
733
+
734
+ set_pgpool_conf $CONF
735
+
736
+ PGPOOL_PORT=`expr $PORT + 1`
737
+ echo "port = $PGPOOL_PORT" >> $CONF
738
+ PCP_PORT=`expr $PORT + 2`
739
+ echo "pcp_port = $PCP_PORT" >> $CONF
740
+
741
+ test ! -d run && mkdir run
742
+ echo "pid_file_name = '$BASEDIR/run/pgpool.pid'" >> $CONF
743
+ test ! -d log && mkdir log
744
+ echo "logdir = '$BASEDIR/log'" >> $CONF
745
+
746
+ echo '$PGPOOL_INSTALL_DIR/bin/pgpool -D -n -f $dir/etc/pgpool.conf -F $dir/etc/pcp.conf -a $dir/etc/pool_hba.conf > $dir/log/pgpool.log 2>&1 &' >> $STARTALL
747
+
748
+ # create pcp.conf
749
+ cp $PGPOOLDIR/pcp.conf.sample etc/pcp.conf
750
+ echo -n "${WHOAMI}:" >> etc/pcp.conf
751
+ $PGPOOL_INSTALL_DIR/bin/pg_md5 $WHOAMI >> etc/pcp.conf
752
+
753
+ # create pool_passwd
754
+ $PGPOOL_INSTALL_DIR/bin/pg_md5 -m -f etc/pgpool.conf -u $WHOAMI $WHOAMI
755
+
756
+ # create archive directory
757
+ mkdir archivedir
758
+
759
+ #-------------------------------------------
760
+ # if streaming replication mode, we need to create data1 and so on, by
761
+ # using on line recovery.
762
+ #-------------------------------------------
763
+
764
+ if [ $MODE = 's' ];then
765
+ # temporarily start data0 cluster to create extensions
766
+ echo "temporarily start data0 cluster to create extensions"
767
+ $PG_CTL -w -D data0 start >&5 2>&1
768
+ $PSQL -p $BASEPORT template1 >&5 2>&1 <<EOF
769
+ CREATE EXTENSION pgpool_regclass;
770
+ CREATE EXTENSION pgpool_recovery;
771
+ CREATE DATABASE test;
772
+ EOF
773
+
774
+ n=0
775
+ PORT=$BASEPORT
776
+ CLUSTER="data"`expr $n`
777
+ CLUSTERDIR=$BASEDIR/$CLUSTER
778
+ echo "backend_hostname$n = ''" >> $CONF
779
+ echo "backend_port$n = $PORT" >> $CONF
780
+ echo "backend_weight$n = 1" >> $CONF
781
+ echo "backend_data_directory$n = '$CLUSTERDIR'" >> $CONF
782
+
783
+ # temporarily start pgpool
784
+ echo "temporarily start pgpool-II to create standby nodes"
785
+ $PGPOOL_INSTALL_DIR/bin/pgpool -D -n -f $BASEDIR/etc/pgpool.conf -F $BASEDIR/etc/pcp.conf -a $BASEDIR/etc/pool_hba.conf > $BASEDIR/log/pgpool.log 2>&1 &
786
+
787
+ wait_for_pgpool_startup
788
+
789
+ if [ $NUMCLUSTERS -gt 1 ];then
790
+ n=1
791
+ while [ $n -lt $NUMCLUSTERS ]
792
+ do
793
+ # set up pgpool.conf
794
+ PORT=`expr $PORT + 1`
795
+ echo "backend_hostname$n = ''" >> $CONF
796
+ echo "backend_port$n = $PORT" >> $CONF
797
+ echo "backend_weight$n = 1" >> $CONF
798
+ CLUSTER="data"`expr $n`
799
+ CLUSTERDIR=$BASEDIR/$CLUSTER
800
+ echo "backend_data_directory$n = '$CLUSTERDIR'" >> $CONF
801
+ n=`expr $n + 1`
802
+ done
803
+ $PGPOOL_INSTALL_DIR/bin/pgpool -f $BASEDIR/etc/pgpool.conf reload
804
+ fi
805
+
806
+ wait_for_pgpool_reload $NUMCLUSTERS
807
+ $PSQL -p $PGPOOL_PORT -c "show pool_nodes" test
808
+
809
+ # recovery data1 and so on
810
+ n=1
811
+ while [ $n -lt $NUMCLUSTERS ]
812
+ do
813
+ echo -n "recovery node $n..."
814
+ $PGPOOL_INSTALL_DIR/bin/pcp_recovery_node 1 localhost $PCP_PORT $WHOAMI $WHOAMI $n
815
+ echo "done."
816
+ n=`expr $n + 1`
817
+ if [ $n -lt $NUMCLUSTERS ];then
818
+ wait_for_pgpool_startup
819
+ # sleep 10
820
+ fi
821
+ done
822
+
823
+ #
824
+ # replication mode
825
+ #
826
+ else
827
+ n=0
828
+ PORT=$BASEPORT
829
+ CLUSTER="data"`expr $n`
830
+ CLUSTERDIR=$BASEDIR/$CLUSTER
831
+
832
+ while [ $n -lt $NUMCLUSTERS ]
833
+ do
834
+ # set up pgpool.conf
835
+ echo "backend_hostname$n = ''" >> $CONF
836
+ echo "backend_port$n = $PORT" >> $CONF
837
+ echo "backend_weight$n = 1" >> $CONF
838
+ CLUSTER="data"`expr $n`
839
+ CLUSTERDIR=$BASEDIR/$CLUSTER
840
+ echo "backend_data_directory$n = '$CLUSTERDIR'" >> $CONF
841
+ PORT=`expr $PORT + 1`
842
+ n=`expr $n + 1`
843
+ done
844
+
845
+ echo "start all"
846
+ $STARTALL >&5 2>&1
847
+ echo -n "waiting for pgpool-II coming up..."
848
+ wait_for_pgpool_startup
849
+ # sleep 20
850
+ echo "done."
851
+ fi
852
+
853
+ if [ $MODE = "r" ];then
854
+ echo "create extensions"
855
+ $PSQL -p $PGPOOL_PORT template1 >&5 2>&1 <<EOF
856
+ CREATE EXTENSION pgpool_regclass;
857
+ CREATE EXTENSION pgpool_recovery;
858
+ CREATE DATABASE test;
859
+ EOF
860
+ fi
861
+
862
+ #-------------------------------------------
863
+ # create follow_masterfailover script
864
+ #-------------------------------------------
865
+ if [ $MODE = "s" ];then
866
+ echo "creating follow master script"
867
+ create_follow_master_script >&5 2>&1
868
+ echo "follow_master_command = '$FOLLOW_MASTER_SCRIPT %d %h %p %D %m %M %H %P %r %R'" >> $CONF
869
+ fi
870
+
871
+ $PSQL -p $PGPOOL_PORT test <<EOF
872
+ show pool_nodes;
873
+ EOF
874
+
875
+ echo "pgpool port is $PGPOOL_PORT" >> README.port
876
+ echo "pcp port is $PCP_PORT" >> README.port
877
+
878
+ if [ $NO_STOP = "false" ];then
879
+ echo "shutdown all"
880
+ $SHUTDOWNALL >&5 2>&1
881
+ fi
882
+
883
+ echo "export PGPOOL_PORT=$PGPOOL_PORT" > bashrc.ports
884
+ echo "export PCP_PORT=$PCP_PORT" >> bashrc.ports
885
+ chmod 755 bashrc.ports
886
+
887
+ echo
888
+ echo "pgpool-II setting for $MODENAME is done."
889
+ echo "To start the whole system, use ${STARTALL}."
890
+ echo "To shutdown the whole system, use ${SHUTDOWNALL}."
891
+ echo "pcp command user name is \"$WHOAMI\", password is \"$WHOAMI\"."
892
+ echo "Each PostgreSQL, pgpool-II and pcp port is as follows:"
893
+ cat README.port
894
+ echo "The info above is in README.port."
895
+
896
+ if [ $NO_STOP = "true" ];then
897
+ echo "CAUTION: whole system is still running."
898
+ fi