{"id":8825,"date":"2016-09-12T19:02:43","date_gmt":"2016-09-12T17:02:43","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/sharding-with-postgresql\/"},"modified":"2023-06-08T15:20:19","modified_gmt":"2023-06-08T13:20:19","slug":"sharding-with-postgresql","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/sharding-with-postgresql\/","title":{"rendered":"Sharding with PostgreSQL"},"content":{"rendered":"<p><strong>By Mouhamadou Diaw<\/strong><\/p>\n<p>In this article we are going to talk about sharding in PostgreSQL. What is sharding, Sharding is like partitioning. The difference is that with traditional partioning, partitions are stored in the same database while sharding shards (partitions) are stored in different servers.<br \/>\nBelow is an example of sharding configuration we will use for our demonstration<\/p>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/sharding.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-10606\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/sharding.png\" alt=\"sharding\" width=\"300\" height=\"163\" \/><br \/>\n<\/a>PostgreSQL does not provide built-in tool for sharding. We will use <a href=\"https:\/\/www.citusdata.com\" target=\"blank\" rel=\"noopener\"> citus <\/a>\u00a0which extends PostgreSQL capability to do sharding and replication.<br \/>\n<span style=\"line-height: 1.5\">We will use 3 servers<br \/>\n<\/span>pgshard0: 192.168.1.50<br \/>\npgshard1: 192.168.1.51<br \/>\npgshard2: 192.168.1.52<br \/>\nFirst let\u2019s install PostgreSQL + citus extension on all servers (pgshard0, pgshard1, pgshard2). We suppose of course that network is configured so that all server can communicate<br \/>\n<code>[root@pgshard0 ~]# yum install -y https:\/\/download.postgresql.org\/pub\/repos\/yum\/9.5\/redhat\/rhel-7-x86_64\/pgdg-oraclelinux95-9.5-2.noarch.rpm<\/code><br \/>\n<code>[root@pgshard0 ~]# yum install -y citus_95.x86_64<\/code><br \/>\nNow let\u2019s \u00a0to initialize a new database system on all servers (pgshard0, pgshard1, pgshard2)<br \/>\n<code>[root@pgshard0 ~]# \/usr\/pgsql-9.5\/bin\/postgresql95-setup initdb<br \/>\nInitializing database ... OK<\/code><br \/>\nTo load citus extension we have to edit the \/var\/lib\/pgsql\/9.5\/data\/postgresql.conf \u00a0 file and add the following line<br \/>\nshared_preload_libraries = &#8216;citus&#8217;<br \/>\n<code>[root@pgshard0 data]# grep shared_preload_libraries \/var\/lib\/pgsql\/9.5\/data\/postgresql.conf<br \/>\n#shared_preload_libraries = '' # (change requires restart)<br \/>\nshared_preload_libraries = 'citus'<br \/>\n[root@pgshard0 data]#<\/code><br \/>\nTo allow postgreSQL connection between servers we have to configure two configuration files\u00a0\/var\/lib\/pgsql\/9.5\/data\/postgresql.conf \u00a0and\u00a0\/var\/lib\/pgsql\/9.5\/data\/pg_hba.conf<br \/>\n<code>[root@pgshard0 data]# grep listen postgresql.conf<br \/>\nlisten_addresses = '*' # what IP address(es) to listen on;<br \/>\n[root@pgshard0 data]#<\/code><br \/>\n<code>[root@pgshard0 data]# grep trust pg_hba.conf<br \/>\n# METHOD can be \"trust\", \"reject\", \"md5\", \"password\", \"gss\", \"sspi\",<br \/>\nhost all all 127.0.0.1\/32 trust<br \/>\nhost all all 192.168.1.0\/24 trust<br \/>\nhost all all ::1\/128 trust<br \/>\n[root@pgshard0 data]#<\/code><\/p>\n<p class=\"dbiNormal\"><span class=\"c1\"><span lang=\"EN-US\">Let\u2019s now start database <\/span><\/span><span lang=\"EN-US\" style=\"font-family: 'Arial',sans-serif;color: #404040\">on all servers (pgshard0, pgshard1, pgshard2)<br \/>\n<\/span><\/p>\n<p><code>[root@pgshard0 data]# service postgresql-9.5 start<br \/>\nRedirecting to \/bin\/systemctl start postgresql-9.5.service<br \/>\n[root@pgshard0 data]#<\/code><\/p>\n<p class=\"dbiNormal\"><span lang=\"EN-US\" style=\"font-family: 'Arial',sans-serif;color: #404040\">\u00a0We need to inform the master (pgshard0) about its workers (pgshard1 and pgshard2). For this we have to create a configuration file\u00a0pg_worker_list.conf \u00a0like this<br \/>\n<\/span><\/p>\n<p><code>[root@pgshard0 data]# pwd<br \/>\n\/var\/lib\/pgsql\/9.5\/data<br \/>\n[root@pgshard0 data]# cat pg_worker_list.conf<br \/>\npgshard1 5432<br \/>\npgshard2 5432<br \/>\n[root@pgshard0 data]#<\/code><\/p>\n<p class=\"dbiNormal\"><span lang=\"EN-US\" style=\"font-family: 'Arial',sans-serif;color: #404040\">Let&#8217;s now reload the master pgshard0 \u00a0to take into account the modification<br \/>\n<\/span><\/p>\n<p><code>[root@pgshard0 ~]# service postgresql-9.5 reload<br \/>\nRedirecting to \/bin\/systemctl reload postgresql-9.5.service<br \/>\n[root@pgshard0 ~]#<\/code><\/p>\n<p class=\"dbiNormal\"><span lang=\"EN-US\" style=\"font-family: 'Arial',sans-serif;color: #404040\">Very important: \u00a0we must create citus extension on both servers<br \/>\n<\/span><\/p>\n<p><code>postgres=# create extension citus;<br \/>\nCREATE EXTENSION<br \/>\npostgres=# \\dx<br \/>\nList of installed extensions<br \/>\nName | Version | Schema | Description<br \/>\n---------+---------+------------+------------------------------<br \/>\ncitus | 5.2-1 | pg_catalog | Citus distributed database<br \/>\nplpgsql | 1.0 | pg_catalog | PL\/pgSQL procedural language<br \/>\n(2 rows)<\/code><\/p>\n<p class=\"dbiNormal\"><span lang=\"EN-US\" style=\"font-family: 'Arial',sans-serif;color: #404040\">The last step before the sharding is now to verify that the master is ready.\u00a0<\/span>This SELECT command we will \u00a0run in the psql shell should output the worker nodes mentioned in the<span class=\"apple-converted-space\">\u00a0<\/span><cite><span style=\"font-family: 'Arial',sans-serif\">pg_worker_list.conf<\/span><\/cite><span class=\"apple-converted-space\">\u00a0<\/span>file.<\/p>\n<p><code>postgres=# SELECT * FROM master_get_active_worker_nodes();<br \/>\nnode_name | node_port<br \/>\n-----------+-----------<br \/>\npgshard2 | 5432<br \/>\npgshard1 | 5432<br \/>\n(2 rows)<br \/>\npostgres=#<\/code><\/p>\n<p class=\"dbiNormal\">Every thing is going fine until now, so we can create on the master the table to be sharded.\u00a0Let\u2019s say table sales<\/p>\n<p><code>postgres=# CREATE TABLE sales<br \/>\npostgres-# (deptno int not null,<br \/>\npostgres(# deptname varchar(20),<br \/>\npostgres(# total_amount int,<br \/>\npostgres(# CONSTRAINT pk_sales PRIMARY KEY (deptno)) ;<br \/>\nCREATE TABLE<\/code><\/p>\n<p class=\"dbiNormal\"><span lang=\"EN-US\">We need\u00a0have inform Citus that data of table sales will be distributed among pghard1 and pgshard2. In our case we choose a hash distribution.<br \/>\n<\/span><\/p>\n<p><code>postgres=# SELECT master_create_distributed_table('sales', 'deptno', 'hash');<br \/>\nmaster_create_distributed_table<br \/>\n---------------------------------<br \/>\n(1 row)<\/code><\/p>\n<p>In our example we are going to create one shard on each worker. We will\u00a0\u00a0Specify<br \/>\nthe table name : \u00a0sales<br \/>\ntotal shard count : 2<br \/>\nreplication factor : \u00a01 \u00a0&#8211;No replication<br \/>\n<code>postgres=# SELECT master_create_worker_shards('sales', 2, 1);<br \/>\nmaster_create_worker_shards<br \/>\n-----------------------------<br \/>\n(1 row)<br \/>\npostgres=#<br \/>\n<\/code><\/p>\n<p class=\"dbiNormal\"><span lang=\"EN-US\">And guys it\u2019s all. Sharding is done. Connecting to pgshard1 and pgshard2 we can verify that shards were created with the same structure than the base table.<br \/>\n<\/span><\/p>\n<p><code>[postgres@pgshard1 bin]$ psql -c \"\\dt\"<br \/>\nList of relations<br \/>\nSchema | Name | Type | Owner<br \/>\n--------+--------------+-------+----------<br \/>\npublic | sales_102026 | table | postgres<br \/>\n(1 row)<br \/>\n<\/code><br \/>\n<code>[postgres@pgshard2 ~]$ psql -c \"\\dt\"<br \/>\nList of relations<br \/>\nSchema | Name | Type | Owner<br \/>\n--------+--------------+-------+----------<br \/>\npublic | sales_102027 | table | postgres<br \/>\n(1 row)<\/code><br \/>\nNow let\u2019s insert some rows in the table from the master<br \/>\n<code>postgres=# insert into sales (deptno,deptname,total_amount) values (1,'french_dept',10000);<br \/>\nINSERT 0 1<br \/>\npostgres=# insert into sales (deptno,deptname,total_amount) values (2,'german_dept',15000);<br \/>\nINSERT 0 1<br \/>\npostgres=# insert into sales (deptno,deptname,total_amount) values (3,'china_dept',21000);<br \/>\nINSERT 0 1<br \/>\npostgres=# insert into sales (deptno,deptname,total_amount) values (4,'gambia_dept',8750);<br \/>\nINSERT 0 1<br \/>\npostgres=# insert into sales (deptno,deptname,total_amount) values (5,'japan_dept',12010);<br \/>\nINSERT 0 1<br \/>\npostgres=# insert into sales (deptno,deptname,total_amount) values (6,'china_dept',35000);<br \/>\nINSERT 0 1<br \/>\npostgres=# insert into sales (deptno,deptname,total_amount) values (7,'nigeria_dept',10000);<br \/>\nINSERT 0 1<br \/>\npostgres=# insert into sales (deptno,deptname,total_amount) values (8,'senegal_dept',33000);<br \/>\nINSERT 0 1<br \/>\npostgres=#<\/code><\/p>\n<p class=\"dbiNormal\"><span lang=\"EN-US\">We can see that data are distributed between pgshard1 and pgshard2<br \/>\n<\/span><\/p>\n<p><code>[postgres@pgshard1 bin]$ .\/psql<br \/>\npsql (9.5.4)<br \/>\nType \"help\" for help.<br \/>\npostgres=# select * from sales_102026;<br \/>\ndeptno | deptname | total_amount<br \/>\n--------+--------------+--------------<br \/>\n1 | french_dept | 10000<br \/>\n3 | india_dept | 21000<br \/>\n4 | gambia_dept | 8750<br \/>\n5 | japan_dept | 12010<br \/>\n7 | nigeria_dept | 10000<br \/>\n8 | senegal_dept | 33000<br \/>\n(6 rows)<\/code><\/p>\n<p><code>[postgres@pgshard2 bin]$ .\/psql<br \/>\npsql (9.5.4)<br \/>\nType \"help\" for help.<br \/>\npostgres=# select * from sales_102027;<br \/>\ndeptno | deptname | total_amount<br \/>\n--------+-------------+--------------<br \/>\n2 | german_dept | 15000<br \/>\n6 | china_dept | 35000<br \/>\n(2 rows)<\/code><\/p>\n<p>If we do an explain from the master pgshard0, we note that query is routed to different shard depending of data<br \/>\n<code>postgres=# explain verbose select * from sales where deptno=5;<br \/>\nQUERY PLAN<br \/>\n--------------------------------------------------------------------------------------------------------------<br \/>\nDistributed Query<br \/>\nExecutor: Router<br \/>\nTask Count: 1<br \/>\nTasks Shown: All<br \/>\n-&gt; Task<br \/>\nNode: host=pgshard1 port=5432 dbname=postgres<br \/>\n-&gt; Index Scan using pk_sales_102026 on public.sales_102026 sales (cost=0.15..8.17 rows=1 width=66)<br \/>\nOutput: deptno, deptname, total_amount<br \/>\nIndex Cond: (sales.deptno = 5)<br \/>\n(9 rows)<\/code><\/p>\n<p><code>postgres=# explain verbose select * from sales where deptno=6;<br \/>\nQUERY PLAN<br \/>\n--------------------------------------------------------------------------------------------------------------<br \/>\nDistributed Query<br \/>\nExecutor: Router<br \/>\nTask Count: 1<br \/>\nTasks Shown: All<br \/>\n-&gt; Task<br \/>\nNode: host=pgshard2 port=5432 dbname=postgres<br \/>\n-&gt; Index Scan using pk_sales_102027 on public.sales_102027 sales (cost=0.15..8.17 rows=1 width=66)<br \/>\nOutput: deptno, deptname, total_amount<br \/>\nIndex Cond: (sales.deptno = 6)<br \/>\n(9 rows)<\/code><\/p>\n<p>Conclusion:<br \/>\nIn this article we show that PostgreSQL allows to do many interesting things. Use of extensions can considerably extend PostgreSQL capability<\/p>\n","protected":false},"excerpt":{"rendered":"<p>By Mouhamadou Diaw In this article we are going to talk about sharding in PostgreSQL. What is sharding, Sharding is like partitioning. The difference is that with traditional partioning, partitions are stored in the same database while sharding shards (partitions) are stored in different servers. Below is an example of sharding configuration we will use [&hellip;]<\/p>\n","protected":false},"author":27,"featured_media":8827,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[229],"tags":[586,917],"type_dbi":[],"class_list":["post-8825","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-database-administration-monitoring","tag-postegresql","tag-sharding"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Sharding with PostgreSQL - dbi Blog<\/title>\n<meta name=\"description\" content=\"PostgreSQL, Sharding\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/sharding-with-postgresql\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Sharding with PostgreSQL\" \/>\n<meta property=\"og:description\" content=\"PostgreSQL, Sharding\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/sharding-with-postgresql\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-09-12T17:02:43+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-06-08T13:20:19+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/sharding-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"578\" \/>\n\t<meta property=\"og:image:height\" content=\"314\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Oracle Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Oracle Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sharding-with-postgresql\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sharding-with-postgresql\/\"},\"author\":{\"name\":\"Oracle Team\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\"},\"headline\":\"Sharding with PostgreSQL\",\"datePublished\":\"2016-09-12T17:02:43+00:00\",\"dateModified\":\"2023-06-08T13:20:19+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sharding-with-postgresql\/\"},\"wordCount\":453,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sharding-with-postgresql\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/sharding-1.png\",\"keywords\":[\"PostegreSQL\",\"Sharding\"],\"articleSection\":[\"Database Administration &amp; Monitoring\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/sharding-with-postgresql\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sharding-with-postgresql\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/sharding-with-postgresql\/\",\"name\":\"Sharding with PostgreSQL - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sharding-with-postgresql\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sharding-with-postgresql\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/sharding-1.png\",\"datePublished\":\"2016-09-12T17:02:43+00:00\",\"dateModified\":\"2023-06-08T13:20:19+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\"},\"description\":\"PostgreSQL, Sharding\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sharding-with-postgresql\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/sharding-with-postgresql\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sharding-with-postgresql\/#primaryimage\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/sharding-1.png\",\"contentUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/sharding-1.png\",\"width\":578,\"height\":314},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sharding-with-postgresql\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Sharding with PostgreSQL\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\",\"name\":\"Oracle Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g\",\"caption\":\"Oracle Team\"},\"url\":\"https:\/\/www.dbi-services.com\/blog\/author\/oracle-team\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Sharding with PostgreSQL - dbi Blog","description":"PostgreSQL, Sharding","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:\/\/www.dbi-services.com\/blog\/sharding-with-postgresql\/","og_locale":"en_US","og_type":"article","og_title":"Sharding with PostgreSQL","og_description":"PostgreSQL, Sharding","og_url":"https:\/\/www.dbi-services.com\/blog\/sharding-with-postgresql\/","og_site_name":"dbi Blog","article_published_time":"2016-09-12T17:02:43+00:00","article_modified_time":"2023-06-08T13:20:19+00:00","og_image":[{"width":578,"height":314,"url":"http:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/sharding-1.png","type":"image\/png"}],"author":"Oracle Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Oracle Team","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/sharding-with-postgresql\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/sharding-with-postgresql\/"},"author":{"name":"Oracle Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"headline":"Sharding with PostgreSQL","datePublished":"2016-09-12T17:02:43+00:00","dateModified":"2023-06-08T13:20:19+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/sharding-with-postgresql\/"},"wordCount":453,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/sharding-with-postgresql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/sharding-1.png","keywords":["PostegreSQL","Sharding"],"articleSection":["Database Administration &amp; Monitoring"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/sharding-with-postgresql\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/sharding-with-postgresql\/","url":"https:\/\/www.dbi-services.com\/blog\/sharding-with-postgresql\/","name":"Sharding with PostgreSQL - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/sharding-with-postgresql\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/sharding-with-postgresql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/sharding-1.png","datePublished":"2016-09-12T17:02:43+00:00","dateModified":"2023-06-08T13:20:19+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"description":"PostgreSQL, Sharding","breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/sharding-with-postgresql\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/sharding-with-postgresql\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/sharding-with-postgresql\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/sharding-1.png","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/sharding-1.png","width":578,"height":314},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/sharding-with-postgresql\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Sharding with PostgreSQL"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee","name":"Oracle Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g","caption":"Oracle Team"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/oracle-team\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/8825","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/27"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=8825"}],"version-history":[{"count":1,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/8825\/revisions"}],"predecessor-version":[{"id":25679,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/8825\/revisions\/25679"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media\/8827"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=8825"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=8825"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=8825"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=8825"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}