{"id":150928,"date":"2018-11-15T04:14:16","date_gmt":"2018-11-15T04:14:16","guid":{"rendered":"https:\/\/webkul.com\/blog\/?p=150928"},"modified":"2018-11-15T04:14:16","modified_gmt":"2018-11-15T04:14:16","slug":"integrate-pgbouncer-with-odoo","status":"publish","type":"post","link":"https:\/\/webkul.com\/blog\/integrate-pgbouncer-with-odoo\/","title":{"rendered":"Integrate Pgbouncer with Odoo!!"},"content":{"rendered":"<h2><span style=\"color: #ff6600\">Why do we need a Connection Pooler?<\/span><\/h2>\n<p class=\"western\" style=\"text-align: left\"><span style=\"font-size: large\">Saturating db connections is always problematic when you need more &amp; can be rectified by increasing the allowed no of db connections considering database constraints at the same time. Performance issues can still persist if db connection creation\/termination time is considerable.\u00a0<\/span><\/p>\n<p>&nbsp;<\/p>\n<blockquote>\n<p class=\"western\" style=\"text-align: left\"><strong>PostgreSQL Error : &#8211; FATAL: sorry, too many clients already<\/strong><\/p>\n<\/blockquote>\n<p>&nbsp;<\/p>\n<p class=\"western\" style=\"text-align: left\"><span style=\"font-size: large\">Generally, the db connection creation &amp; closing operations are expensive in terms of resources &amp; time. Eg. PostgreSQL forks entirely a new thread\/process for a new connection which increases the overall transaction time. The better option is to avoid this irrelevant expense by reusing those already existing\/established db connections. Hence, enhance the performance. This is exactly what a connection pooler does.<\/span><\/p>\n<p class=\"western\" style=\"text-align: left\"><span style=\"font-size: large\"><i><b>Those who cannot remember the past are condemned to repeat it \u2013 Dynamic Programming.<\/b><\/i><\/span><\/p>\n<h2><span style=\"color: #ff6600\">What is a Connection Pooler?<\/span><\/h2>\n<p class=\"western\"><span style=\"font-size: large\">A connection pooler is an intermediate tool, mainly responsible for managing\/handling db connections and provides an abstracted interface to the web servers. It maintains a pool of db connections for future use. It helps you avoid the cost of creating\/initiating db connections as the connections are kept dormant and can used as &amp; when required. As a result, pooler allows you to serve more db requests\/queries than the allowed no of connections and in a bit lesser time too.\u00a0<\/span><\/p>\n<h2><span style=\"color: #ff6600\">How does it work?<\/span><\/h2>\n<p class=\"western\"><span style=\"font-size: large\">The architecture is pretty straightforward. First of all, the connection pooler would sit between the web-server and database as a catalyst and speeds up the transaction. Only few configuration values need changes at server level. <\/span><span style=\"font-size: large\">E.g. db port,etc.\u00a0\u00a0<\/span><\/p>\n<p class=\"western\"><span style=\"font-size: large\">The web server can perform transactions on db without having to create\/drop any db connection explicitly. Therefore, avoiding the extra overhead. This also means the connection pooler works as a reverse-proxy(likewise). Consequently taking away most of the overhead from database application. Pooler maintains a set of alive db connections. And spins up newer ones only if all existing are exhausted or to maintain a desired count(min_pool_size &amp; reserve_pool_size<\/span>)\u00a0<span style=\"font-size: large\">as per the specified configurations.<\/span><\/p>\n<p class=\"western\"><span style=\"font-size: large\">Secondly, the web-server would pick an existing db connection from the pool and would perform the transaction. Once the transaction completes, the connection returns to the pool. Pgbouncer\u2019s internal computations consume additional capacity. But trading off that additional capacity to avoid expense of db connection creation is acceptable.<\/span><\/p>\n<blockquote>\n<p class=\"western\"><span style=\"color: #ff0000\">Note: &#8211;\u00a0<\/span><span style=\"font-size: large\"> Connection pooler doesn\u2019t make db queries execute faster, it rather expedites the process of implementation i.e. queries will hit the db sooner. The query execution time remains same with or without pooler. Query optimisation is entirely a different story.<\/span><\/p>\n<\/blockquote>\n<h2><\/h2>\n<h2><span style=\"color: #ff6600\">Pgbouncer<\/span><\/h2>\n<p><span style=\"font-size: large\"> Pgbouncer is a stable, in-production connection pooler for PostgreSQL. PostgreSQL doesn&#8217;t realise the presence of PostgreSQL. Pgbouncer can do load handling, connection scheduling\/routing and load balancing.<\/span><\/p>\n<p><span style=\"font-size: large\">It provides three types of pooling(default to session) methods, described below: &#8211;<\/span><\/p>\n<p><span style=\"font-size: large\">1. <strong>Session Pooling<\/strong> :- The client uses connection for the entire duration it stays connected &amp; only returns once disconnected.<\/span><\/p>\n<p><span style=\"font-size: large\">2. <strong>Transaction Pooling<\/strong> :- Client can use connection only for a transaction. Connection is taken away once the transaction is completed. Therefore, session-based features of PostgreSQL can\u2019t be achieved.<\/span><\/p>\n<p><span style=\"font-size: large\">3. <strong>Statement Pooling<\/strong> :- This is transaction pooling with multi-statement transactions disallowed. This is meant to enforce\u00a0&#8220;autocommit&#8221; mode on client, mostly targeted for PL\/Proxy.<\/span><\/p>\n<p><span style=\"font-size: large\"> Check <\/span><span style=\"font-size: large\"><a href=\"https:\/\/wiki.postgresql.org\/wiki\/PgBouncer\" target=\"_blank\" rel=\"noopener\">this<\/a> for compatible PostgreSQL features for different Pooling methods.<\/span><\/p>\n<h2><span style=\"color: #ff6600\">Pgbouncer with Odoo<\/span><\/h2>\n<p class=\"western\"><span style=\"font-size: large\">The blog will present you how you can integrate Pgbouncer(for PostgreSQL) with Odoo. <\/span><\/p>\n<blockquote>\n<p class=\"western\">\u00a0<a href=\"https:\/\/webkul.com\/blog\/install-odoo11-on-ubuntu\/\" target=\"_blank\" rel=\"noopener\">This<\/a>\u00a0<span style=\"font-size: large\"><span style=\"font-size: large\">can help you setup Odoo if you haven&#8217;t yet.\u00a0<\/span><\/span><\/p>\n<\/blockquote>\n<h1 class=\"western\"><span style=\"font-size: large;color: #ff6600\">How to Setup Pgbouncer with Odoo: &#8211;<\/span><\/h1>\n<ul>\n<li><span style=\"font-size: large\">\u00a0Install pgbouncer.<\/span><\/li>\n<\/ul>\n<pre class=\"brush:shell\">sudo apt install pgbouncer<\/pre>\n<ul>\n<li><span style=\"font-size: large\">\u00a0Edit the pgbouncer configuration file<strong> \/etc\/pgbouncer\/pgbouncer.ini <\/strong>under\u00a0 the databases section.\u00a0<\/span><\/li>\n<\/ul>\n<blockquote><p><span style=\"font-size: large\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Add\u00a0<strong>* = host=localhost port=5432<\/strong>\u00a0to Map all databases\u00a0<\/span><\/p>\n<p><span style=\"font-size: large\"><strong>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Or<\/strong><\/span><\/p>\n<p><span style=\"font-size: large\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 You can also map databases individually.\u00a0<\/span><span style=\"font-size: large\">E.g.<\/span><span style=\"font-size: large\">\u00a0\u00a0<strong>db1 =host=localhost port=5432 dbname=db1<\/strong><\/span><span style=\"font-size: large\">\u00a0 \u00a0 \u00a0<\/span><\/p><\/blockquote>\n<ul>\n<li><span style=\"font-size: large\">\u00a0Pgbouncer needs db user credentials. Run below query in psql to save credentials in a file readable to pgbouncer\u00a0 user.<\/span><\/li>\n<\/ul>\n<blockquote>\n<pre class=\"brush:shell\">COPY ( SELECT '\"' || rolname || '\" \"' ||\u00a0 CASE WHEN rolpassword IS null THEN '' ELSE rolpassword END || '\"'\r\nFROM pg_authid )\u00a0TO '\/etc\/pgbouncer\/userlist.txt';<\/pre>\n<p><span style=\"color: #ff0000\">Note<\/span> :-\u00a0 Ensure that you update this file every time a new db user is created.<\/p><\/blockquote>\n<ul>\n<li><span style=\"font-size: large\">\u00a0Set the <strong>listen_port<\/strong> and <strong>listen_address<\/strong> accordingly in pgbouncer.ini.<\/span><\/li>\n<li><span style=\"font-size: large\">\u00a0Set the <strong>auth_type<\/strong> to <strong>md5<\/strong>. Auth type md5 performs client authentication with the help of file generated in Step 3 but trust doesn\u2019t. If you set auth_type as trust, Pgbouncer will provide access to databases without any authentication.\u00a0<\/span><\/li>\n<li><span style=\"font-size: large\">\u00a0Change the <strong>db_port<\/strong> in Odoo config to <strong>listen_port<\/strong> set in step 4.<\/span><\/li>\n<li><span style=\"font-size: large\">\u00a0Restart Pgbouncer &amp; then Odoo.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-size: large\">\u00a0Now the db connections route via Pgbouncer.<\/span><\/p>\n<p><span style=\"font-size: large\">\u00a0All set!!<\/span><\/p>\n<blockquote>\n<p class=\"western\"><span style=\"font-size: large\"><span style=\"color: #ff0000\">Note: &#8211;\u00a0<\/span>The db_password should not be False in odoo config if auth_type is md5.<\/span><\/p>\n<\/blockquote>\n<p class=\"western\"><span style=\"font-size: large\">Pgbouncer offers deep control over its operations. E.g. you can set the minimum and maximum pool size.\u00a0<\/span><span style=\"font-size: large\">You also get to control the max connections(max_db_connections) to a database and max connections(max_user_connections<\/span><span style=\"font-size: large\">) that can be owned by any user. Some precautionary controls like server_reset_query are also available.<\/span><\/p>\n<p class=\"western\"><span style=\"font-size: large\">Check\u00a0<a href=\"https:\/\/pgbouncer.github.io\/config.html\" target=\"_blank\" rel=\"noopener\">this<\/a> for more such options.<\/span><\/p>\n<p class=\"western\"><span style=\"font-size: large\">Don;t forget to check the log file \/var\/log\/postgresql\/pgbouncer.log.<\/span><\/p>\n<h2 class=\"western\"><span style=\"font-size: large;color: #ff6600\">Pgbench<\/span><\/h2>\n<p class=\"western\"><span style=\"font-size: large\">Use pgbench to load test &amp; check the difference in performance. Pgbench shows the latency, avg execution time or so. Load test db with or without pgbouncer to see the actual difference. In the below small load test ran locally, the latency avg has reduced to one-tenth with pgbouncer. Note that only \u201cselect query\u201d was used. For more complex queries the results will differ. Difference will be more significant for large no of smaller\/lighter queries. For larger\/heavy queries, the performance difference may not be that huge. Query optimisation is still recommended.<\/span><\/p>\n<blockquote>\n<h5 style=\"text-align: left\"><span style=\"color: #008000\"><span style=\"font-size: large\">DB Queries directly on PostgreSQL<\/span><\/span><\/h5>\n<h4><img decoding=\"async\" class=\"wp-image-151034 aligncenter\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2018\/11\/Screenshot-from-2018-11-13-16-11-52.png\" alt=\"\" width=\"628\" height=\"288\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2018\/11\/Screenshot-from-2018-11-13-16-11-52.png 495w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2018\/11\/Screenshot-from-2018-11-13-16-11-52-250x115.png 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2018\/11\/Screenshot-from-2018-11-13-16-11-52-300x138.png 300w\" sizes=\"(max-width: 628px) 100vw, 628px\" loading=\"lazy\" \/><\/h4>\n<\/blockquote>\n<h5><\/h5>\n<h4 style=\"text-align: center\"><\/h4>\n<p>&nbsp;<\/p>\n<blockquote>\n<h5><span style=\"color: #008000\"><span style=\"font-size: large\">DB Queries via Pgbouncer<\/span><\/span><\/h5>\n<p><img decoding=\"async\" class=\"size-full wp-image-151035 aligncenter\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2018\/11\/Screenshot-from-2018-11-13-16-12-18.png\" alt=\"\" width=\"555\" height=\"257\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2018\/11\/Screenshot-from-2018-11-13-16-12-18.png 555w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2018\/11\/Screenshot-from-2018-11-13-16-12-18-250x116.png 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2018\/11\/Screenshot-from-2018-11-13-16-12-18-300x139.png 300w\" sizes=\"(max-width: 555px) 100vw, 555px\" loading=\"lazy\" \/><\/p><\/blockquote>\n<h2><\/h2>\n<h2><span style=\"color: #ff6600\">Conclusion<\/span><\/h2>\n<p><span style=\"font-size: large\">Connection Poolers help when incoming db requests tend to exceed the database connections limit. Poolers can handle the load instead and the databases have lesser chances of freezing then. So, configuration of both pooler and database should resemble. Databases remain unaware of the heavy traffic. Some of the databases have some sort of inbuilt poolers.\u00a0 Connection poolers don&#8217;t always make sense. Avoid poolers in case you have lesser incoming db requests. You need to consider the trade off between the resources poolers consume and resources they save for you. The performance difference can be vital when multiple clients are making multiple db requests. <\/span><\/p>\n<p><span style=\"font-size: large\">Above dictated configuration is pretty simple. Pgbouncer can further be integrated with HAProxy to offer High Availability. It is also possible to have cascaded Pgbouncers if required. Read <a style=\"font-size: large\" href=\"https:\/\/pgday.ru\/presentation\/152\/59649587644b9.pdf\" target=\"_blank\" rel=\"noopener\">this<\/a><span style=\"font-size: large\"> to see how pgbouncer manages 20,000 tps on one node, making it an integral part of Russia\u2019s largest classified site. That post describes different Pgbouncer configurations too. <\/span><\/span><\/p>\n<p><span style=\"font-size: large\"><span style=\"font-size: large\">Check\u00a0<a href=\"https:\/\/wiki.postgresql.org\/wiki\/PgBouncer\" target=\"_blank\" rel=\"noopener\">official documentation<\/a> for more details.\u00a0<\/span><\/span><\/p>\n<p><span style=\"font-size: large\"><span style=\"font-size: large\">Try poolers if you have not.<\/span><\/span><\/p>\n<p>&nbsp;<\/p>\n<p class=\"western\"><span style=\"font-size: large\">First ever!!Thank you for reading this!! Hope that helps.<\/span><\/p>\n<p><span style=\"font-size: large\"><span style=\"font-size: large\">For any kind of query or suggestion, you can reach us at support@webkul.com\u00a0or just raise a ticket at our\u00a0<a href=\"http:\/\/webkul.uvdesk.com\/\" target=\"_blank\" rel=\"noopener\">HelpDesk<\/a>\u00a0system.<\/span><\/span><\/p>\n<p class=\"western\"><span style=\"font-size: large;color: #ff6600\"><b>\u00a0<\/b><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Why do we need a Connection Pooler? Saturating db connections is always problematic when you need more &amp; can be rectified by increasing the allowed no of db connections considering database constraints at the same time. Performance issues can still persist if db connection creation\/termination time is considerable.\u00a0 &nbsp; PostgreSQL Error : &#8211; FATAL: sorry, <a href=\"https:\/\/webkul.com\/blog\/integrate-pgbouncer-with-odoo\/\">[&#8230;]<\/a><\/p>\n","protected":false},"author":230,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1809,166,7511],"tags":[7799,1267,7798,4726],"class_list":["post-150928","post","type-post","status-publish","format-standard","hentry","category-affiliate-system","category-openerp","category-optimization-techniques","tag-dbconnections","tag-odoo","tag-pgbouncer","tag-postgresql"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Integrate Pgbouncer with Odoo!! - Webkul Blog<\/title>\n<meta name=\"description\" content=\"Need of a Connection Pooler. Follow these steps to Integrate pgbouncer with odoo to reuse db connections efficiently.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/webkul.com\/blog\/integrate-pgbouncer-with-odoo\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Integrate Pgbouncer with Odoo!! - Webkul Blog\" \/>\n<meta property=\"og:description\" content=\"Need of a Connection Pooler. Follow these steps to Integrate pgbouncer with odoo to reuse db connections efficiently.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/webkul.com\/blog\/integrate-pgbouncer-with-odoo\/\" \/>\n<meta property=\"og:site_name\" content=\"Webkul Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/webkul\/\" \/>\n<meta property=\"article:published_time\" content=\"2018-11-15T04:14:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2018\/11\/Screenshot-from-2018-11-13-16-11-52.png\" \/>\n<meta name=\"author\" content=\"Manish Bisht\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@webkul\" \/>\n<meta name=\"twitter:site\" content=\"@webkul\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Manish Bisht\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/webkul.com\/blog\/integrate-pgbouncer-with-odoo\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/webkul.com\/blog\/integrate-pgbouncer-with-odoo\/\"},\"author\":{\"name\":\"Manish Bisht\",\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/person\/f01a79d202b7dbd453d67e56a451ae19\"},\"headline\":\"Integrate Pgbouncer with Odoo!!\",\"datePublished\":\"2018-11-15T04:14:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/webkul.com\/blog\/integrate-pgbouncer-with-odoo\/\"},\"wordCount\":1155,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/webkul.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/webkul.com\/blog\/integrate-pgbouncer-with-odoo\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2018\/11\/Screenshot-from-2018-11-13-16-11-52.png\",\"keywords\":[\"dbconnections\",\"odoo\",\"pgbouncer\",\"PostgreSQL\"],\"articleSection\":[\"Affiliate System\",\"OpenERP\",\"Optimization Techniques\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/webkul.com\/blog\/integrate-pgbouncer-with-odoo\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/webkul.com\/blog\/integrate-pgbouncer-with-odoo\/\",\"url\":\"https:\/\/webkul.com\/blog\/integrate-pgbouncer-with-odoo\/\",\"name\":\"Integrate Pgbouncer with Odoo!! - Webkul Blog\",\"isPartOf\":{\"@id\":\"https:\/\/webkul.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/webkul.com\/blog\/integrate-pgbouncer-with-odoo\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/webkul.com\/blog\/integrate-pgbouncer-with-odoo\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2018\/11\/Screenshot-from-2018-11-13-16-11-52.png\",\"datePublished\":\"2018-11-15T04:14:16+00:00\",\"description\":\"Need of a Connection Pooler. Follow these steps to Integrate pgbouncer with odoo to reuse db connections efficiently.\",\"breadcrumb\":{\"@id\":\"https:\/\/webkul.com\/blog\/integrate-pgbouncer-with-odoo\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/webkul.com\/blog\/integrate-pgbouncer-with-odoo\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/webkul.com\/blog\/integrate-pgbouncer-with-odoo\/#primaryimage\",\"url\":\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2018\/11\/Screenshot-from-2018-11-13-16-11-52.png\",\"contentUrl\":\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2018\/11\/Screenshot-from-2018-11-13-16-11-52.png\",\"width\":495,\"height\":227},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/webkul.com\/blog\/integrate-pgbouncer-with-odoo\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/webkul.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Integrate Pgbouncer with Odoo!!\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/webkul.com\/blog\/#website\",\"url\":\"https:\/\/webkul.com\/blog\/\",\"name\":\"Webkul Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/webkul.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/webkul.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/webkul.com\/blog\/#organization\",\"name\":\"WebKul Software Private Limited\",\"url\":\"https:\/\/webkul.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-logo-accent-sq.png\",\"contentUrl\":\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-logo-accent-sq.png\",\"width\":380,\"height\":380,\"caption\":\"WebKul Software Private Limited\"},\"image\":{\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/webkul\/\",\"https:\/\/x.com\/webkul\",\"https:\/\/www.instagram.com\/webkul\/\",\"https:\/\/www.linkedin.com\/company\/webkul\",\"https:\/\/www.youtube.com\/user\/webkul\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/person\/f01a79d202b7dbd453d67e56a451ae19\",\"name\":\"Manish Bisht\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/8d28dac3ae50cbd6a8143b02c850631cf2b8f4254d64a9caf4b7d947f4bbe143?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/8d28dac3ae50cbd6a8143b02c850631cf2b8f4254d64a9caf4b7d947f4bbe143?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g\",\"caption\":\"Manish Bisht\"},\"url\":\"https:\/\/webkul.com\/blog\/author\/manish-bishtck91\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Integrate Pgbouncer with Odoo!! - Webkul Blog","description":"Need of a Connection Pooler. Follow these steps to Integrate pgbouncer with odoo to reuse db connections efficiently.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/webkul.com\/blog\/integrate-pgbouncer-with-odoo\/","og_locale":"en_US","og_type":"article","og_title":"Integrate Pgbouncer with Odoo!! - Webkul Blog","og_description":"Need of a Connection Pooler. Follow these steps to Integrate pgbouncer with odoo to reuse db connections efficiently.","og_url":"https:\/\/webkul.com\/blog\/integrate-pgbouncer-with-odoo\/","og_site_name":"Webkul Blog","article_publisher":"https:\/\/www.facebook.com\/webkul\/","article_published_time":"2018-11-15T04:14:16+00:00","og_image":[{"url":"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2018\/11\/Screenshot-from-2018-11-13-16-11-52.png","type":"","width":"","height":""}],"author":"Manish Bisht","twitter_card":"summary_large_image","twitter_creator":"@webkul","twitter_site":"@webkul","twitter_misc":{"Written by":"Manish Bisht","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/webkul.com\/blog\/integrate-pgbouncer-with-odoo\/#article","isPartOf":{"@id":"https:\/\/webkul.com\/blog\/integrate-pgbouncer-with-odoo\/"},"author":{"name":"Manish Bisht","@id":"https:\/\/webkul.com\/blog\/#\/schema\/person\/f01a79d202b7dbd453d67e56a451ae19"},"headline":"Integrate Pgbouncer with Odoo!!","datePublished":"2018-11-15T04:14:16+00:00","mainEntityOfPage":{"@id":"https:\/\/webkul.com\/blog\/integrate-pgbouncer-with-odoo\/"},"wordCount":1155,"commentCount":0,"publisher":{"@id":"https:\/\/webkul.com\/blog\/#organization"},"image":{"@id":"https:\/\/webkul.com\/blog\/integrate-pgbouncer-with-odoo\/#primaryimage"},"thumbnailUrl":"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2018\/11\/Screenshot-from-2018-11-13-16-11-52.png","keywords":["dbconnections","odoo","pgbouncer","PostgreSQL"],"articleSection":["Affiliate System","OpenERP","Optimization Techniques"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/webkul.com\/blog\/integrate-pgbouncer-with-odoo\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/webkul.com\/blog\/integrate-pgbouncer-with-odoo\/","url":"https:\/\/webkul.com\/blog\/integrate-pgbouncer-with-odoo\/","name":"Integrate Pgbouncer with Odoo!! - Webkul Blog","isPartOf":{"@id":"https:\/\/webkul.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/webkul.com\/blog\/integrate-pgbouncer-with-odoo\/#primaryimage"},"image":{"@id":"https:\/\/webkul.com\/blog\/integrate-pgbouncer-with-odoo\/#primaryimage"},"thumbnailUrl":"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2018\/11\/Screenshot-from-2018-11-13-16-11-52.png","datePublished":"2018-11-15T04:14:16+00:00","description":"Need of a Connection Pooler. Follow these steps to Integrate pgbouncer with odoo to reuse db connections efficiently.","breadcrumb":{"@id":"https:\/\/webkul.com\/blog\/integrate-pgbouncer-with-odoo\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/webkul.com\/blog\/integrate-pgbouncer-with-odoo\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/webkul.com\/blog\/integrate-pgbouncer-with-odoo\/#primaryimage","url":"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2018\/11\/Screenshot-from-2018-11-13-16-11-52.png","contentUrl":"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2018\/11\/Screenshot-from-2018-11-13-16-11-52.png","width":495,"height":227},{"@type":"BreadcrumbList","@id":"https:\/\/webkul.com\/blog\/integrate-pgbouncer-with-odoo\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/webkul.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Integrate Pgbouncer with Odoo!!"}]},{"@type":"WebSite","@id":"https:\/\/webkul.com\/blog\/#website","url":"https:\/\/webkul.com\/blog\/","name":"Webkul Blog","description":"","publisher":{"@id":"https:\/\/webkul.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/webkul.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/webkul.com\/blog\/#organization","name":"WebKul Software Private Limited","url":"https:\/\/webkul.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/webkul.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-logo-accent-sq.png","contentUrl":"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-logo-accent-sq.png","width":380,"height":380,"caption":"WebKul Software Private Limited"},"image":{"@id":"https:\/\/webkul.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/webkul\/","https:\/\/x.com\/webkul","https:\/\/www.instagram.com\/webkul\/","https:\/\/www.linkedin.com\/company\/webkul","https:\/\/www.youtube.com\/user\/webkul\/"]},{"@type":"Person","@id":"https:\/\/webkul.com\/blog\/#\/schema\/person\/f01a79d202b7dbd453d67e56a451ae19","name":"Manish Bisht","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/webkul.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/8d28dac3ae50cbd6a8143b02c850631cf2b8f4254d64a9caf4b7d947f4bbe143?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8d28dac3ae50cbd6a8143b02c850631cf2b8f4254d64a9caf4b7d947f4bbe143?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g","caption":"Manish Bisht"},"url":"https:\/\/webkul.com\/blog\/author\/manish-bishtck91\/"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts\/150928","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/users\/230"}],"replies":[{"embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/comments?post=150928"}],"version-history":[{"count":118,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts\/150928\/revisions"}],"predecessor-version":[{"id":151156,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts\/150928\/revisions\/151156"}],"wp:attachment":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/media?parent=150928"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/categories?post=150928"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/tags?post=150928"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}