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