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