{"id":11044,"date":"2018-03-23T12:45:28","date_gmt":"2018-03-23T11:45:28","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/hash-partitioning-in-postgresql-11\/"},"modified":"2023-06-09T16:56:17","modified_gmt":"2023-06-09T14:56:17","slug":"hash-partitioning-in-postgresql-11","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/hash-partitioning-in-postgresql-11\/","title":{"rendered":"Hash Partitioning in PostgreSQL 11"},"content":{"rendered":"<p><strong>By Mouhamadou Diaw<\/strong><\/p>\n<p>PostgreSQL 10 comes with partition support. But Hash Partitioning was not supported. PostgreSQL 11 will support Hash Partition.<br \/>\nIn the documentation we can read<br \/>\n<em>The table is partitioned by specifying a modulus and a remainder for each partition. Each partition will hold the rows for which the hash value of the partition key divided by the specified modulus will produce the specified remainder.<\/em><br \/>\nFor this demonstration let\u2019s create a table with a hash partition<\/p>\n<div>\n<div id=\"highlighter_822312\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql keyword\">drop<\/code> <code class=\"sql keyword\">table<\/code> <code class=\"sql plain\">dept;<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"sql keyword\">create<\/code> <code class=\"sql keyword\">table<\/code> <code class=\"sql plain\">dept (id\u00a0 <\/code><code class=\"sql keyword\">int<\/code> <code class=\"sql keyword\">primary<\/code> <code class=\"sql keyword\">key<\/code><code class=\"sql plain\">) partition <\/code><code class=\"sql keyword\">by<\/code> <code class=\"sql plain\">hash(id) ; <\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Now let\u2019s create for example 10 partitions<\/p>\n<div>\n<div id=\"highlighter_490207\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<div class=\"line number7 index6 alt2\">7<\/div>\n<div class=\"line number8 index7 alt1\">8<\/div>\n<div class=\"line number9 index8 alt2\">9<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql keyword\">create<\/code> <code class=\"sql keyword\">table<\/code> <code class=\"sql plain\">dept_1 partition <\/code><code class=\"sql keyword\">of<\/code> <code class=\"sql plain\">dept <\/code><code class=\"sql keyword\">FOR<\/code> <code class=\"sql keyword\">VALUES<\/code> <code class=\"sql keyword\">WITH<\/code> <code class=\"sql plain\">(MODULUS 10, REMAINDER 0);<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"sql keyword\">create<\/code> <code class=\"sql keyword\">table<\/code> <code class=\"sql plain\">dept_2 partition <\/code><code class=\"sql keyword\">of<\/code> <code class=\"sql plain\">dept <\/code><code class=\"sql keyword\">FOR<\/code> <code class=\"sql keyword\">VALUES<\/code> <code class=\"sql keyword\">WITH<\/code> <code class=\"sql plain\">(MODULUS 10, REMAINDER 1);<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"sql keyword\">create<\/code> <code class=\"sql keyword\">table<\/code> <code class=\"sql plain\">dept_3 partition <\/code><code class=\"sql keyword\">of<\/code> <code class=\"sql plain\">dept <\/code><code class=\"sql keyword\">FOR<\/code> <code class=\"sql keyword\">VALUES<\/code> <code class=\"sql keyword\">WITH<\/code> <code class=\"sql plain\">(MODULUS 10, REMAINDER 2);<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"sql keyword\">create<\/code> <code class=\"sql keyword\">table<\/code> <code class=\"sql plain\">dept_4 partition <\/code><code class=\"sql keyword\">of<\/code> <code class=\"sql plain\">dept <\/code><code class=\"sql keyword\">FOR<\/code> <code class=\"sql keyword\">VALUES<\/code> <code class=\"sql keyword\">WITH<\/code> <code class=\"sql plain\">(MODULUS 10, REMAINDER 3);<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"sql keyword\">create<\/code> <code class=\"sql keyword\">table<\/code> <code class=\"sql plain\">dept_5 partition <\/code><code class=\"sql keyword\">of<\/code> <code class=\"sql plain\">dept <\/code><code class=\"sql keyword\">FOR<\/code> <code class=\"sql keyword\">VALUES<\/code> <code class=\"sql keyword\">WITH<\/code> <code class=\"sql plain\">(MODULUS 10, REMAINDER 4);<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"sql keyword\">create<\/code> <code class=\"sql keyword\">table<\/code> <code class=\"sql plain\">dept_6 partition <\/code><code class=\"sql keyword\">of<\/code> <code class=\"sql plain\">dept <\/code><code class=\"sql keyword\">FOR<\/code> <code class=\"sql keyword\">VALUES<\/code> <code class=\"sql keyword\">WITH<\/code> <code class=\"sql plain\">(MODULUS 10, REMAINDER 5);<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"sql keyword\">create<\/code> <code class=\"sql keyword\">table<\/code> <code class=\"sql plain\">dept_7 partition <\/code><code class=\"sql keyword\">of<\/code> <code class=\"sql plain\">dept <\/code><code class=\"sql keyword\">FOR<\/code> <code class=\"sql keyword\">VALUES<\/code> <code class=\"sql keyword\">WITH<\/code> <code class=\"sql plain\">(MODULUS 10, REMAINDER 6);<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"sql keyword\">create<\/code> <code class=\"sql keyword\">table<\/code> <code class=\"sql plain\">dept_8 partition <\/code><code class=\"sql keyword\">of<\/code> <code class=\"sql plain\">dept <\/code><code class=\"sql keyword\">FOR<\/code> <code class=\"sql keyword\">VALUES<\/code> <code class=\"sql keyword\">WITH<\/code> <code class=\"sql plain\">(MODULUS 10, REMAINDER 7);<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"sql keyword\">create<\/code> <code class=\"sql keyword\">table<\/code> <code class=\"sql plain\">dept_9 partition <\/code><code class=\"sql keyword\">of<\/code> <code class=\"sql plain\">dept <\/code><code class=\"sql keyword\">FOR<\/code> <code class=\"sql keyword\">VALUES<\/code> <code class=\"sql keyword\">WITH<\/code> <code class=\"sql plain\">(MODULUS 10, REMAINDER 8);<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"sql keyword\">create<\/code> <code class=\"sql keyword\">table<\/code> <code class=\"sql plain\">dept_10 partition <\/code><code class=\"sql keyword\">of<\/code> <code class=\"sql plain\">dept <\/code><code class=\"sql keyword\">FOR<\/code> <code class=\"sql keyword\">VALUES<\/code> <code class=\"sql keyword\">WITH<\/code> <code class=\"sql plain\">(MODULUS 10, REMAINDER 9);<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>We can verify that partitions are created using the d+ command<\/p>\n<div>\n<div id=\"highlighter_701785\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<div class=\"line number7 index6 alt2\">7<\/div>\n<div class=\"line number8 index7 alt1\">8<\/div>\n<div class=\"line number9 index8 alt2\">9<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<div class=\"line number16 index15 alt1\">16<\/div>\n<div class=\"line number17 index16 alt2\">17<\/div>\n<div class=\"line number18 index17 alt1\">18<\/div>\n<div class=\"line number19 index18 alt2\">19<\/div>\n<div class=\"line number20 index19 alt1\">20<\/div>\n<div class=\"line number21 index20 alt2\">21<\/div>\n<div class=\"line number22 index21 alt1\">22<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql plain\">(postgres@[<\/code><code class=\"sql keyword\">local<\/code><code class=\"sql plain\">]:5432) [test] &gt; d+ dept<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"sql spaces\">\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\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"sql keyword\">Table<\/code> <code class=\"sql string\">\"public.dept\"<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"sql spaces\">\u00a0<\/code><code class=\"sql keyword\">Column<\/code> <code class=\"sql plain\">|\u00a0 Type\u00a0\u00a0 | Collation | Nullable | <\/code><code class=\"sql keyword\">Default<\/code> <code class=\"sql plain\">| Storage | Stats target | De<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"sql plain\">scription<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"sql comments\">--------+---------+-----------+----------+---------+---------+--------------+---<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"sql comments\">----------<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"sql spaces\">\u00a0<\/code><code class=\"sql plain\">id\u00a0\u00a0\u00a0\u00a0 | <\/code><code class=\"sql keyword\">integer<\/code> <code class=\"sql plain\">|\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | <\/code><code class=\"sql color1\">not<\/code> <code class=\"sql color1\">null<\/code> <code class=\"sql plain\">|\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | plain\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"sql plain\">Partition <\/code><code class=\"sql keyword\">key<\/code><code class=\"sql plain\">: HASH (id)<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"sql plain\">Indexes:<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"sql spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"sql string\">\"dept_pkey\"<\/code> <code class=\"sql keyword\">PRIMARY<\/code> <code class=\"sql keyword\">KEY<\/code><code class=\"sql plain\">, btree (id)<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"sql plain\">Partitions: dept_1 <\/code><code class=\"sql keyword\">FOR<\/code> <code class=\"sql keyword\">VALUES<\/code> <code class=\"sql keyword\">WITH<\/code> <code class=\"sql plain\">(modulus 10, remainder 0),<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"sql spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"sql plain\">dept_10 <\/code><code class=\"sql keyword\">FOR<\/code> <code class=\"sql keyword\">VALUES<\/code> <code class=\"sql keyword\">WITH<\/code> <code class=\"sql plain\">(modulus 10, remainder 9),<\/code><\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"sql spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"sql plain\">dept_2 <\/code><code class=\"sql keyword\">FOR<\/code> <code class=\"sql keyword\">VALUES<\/code> <code class=\"sql keyword\">WITH<\/code> <code class=\"sql plain\">(modulus 10, remainder 1),<\/code><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"sql spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"sql plain\">dept_3 <\/code><code class=\"sql keyword\">FOR<\/code> <code class=\"sql keyword\">VALUES<\/code> <code class=\"sql keyword\">WITH<\/code> <code class=\"sql plain\">(modulus 10, remainder 2),<\/code><\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"sql spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"sql plain\">dept_4 <\/code><code class=\"sql keyword\">FOR<\/code> <code class=\"sql keyword\">VALUES<\/code> <code class=\"sql keyword\">WITH<\/code> <code class=\"sql plain\">(modulus 10, remainder 3),<\/code><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"sql spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"sql plain\">dept_5 <\/code><code class=\"sql keyword\">FOR<\/code> <code class=\"sql keyword\">VALUES<\/code> <code class=\"sql keyword\">WITH<\/code> <code class=\"sql plain\">(modulus 10, remainder 4),<\/code><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"sql spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"sql plain\">dept_6 <\/code><code class=\"sql keyword\">FOR<\/code> <code class=\"sql keyword\">VALUES<\/code> <code class=\"sql keyword\">WITH<\/code> <code class=\"sql plain\">(modulus 10, remainder 5),<\/code><\/div>\n<div class=\"line number18 index17 alt1\"><code class=\"sql spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"sql plain\">dept_7 <\/code><code class=\"sql keyword\">FOR<\/code> <code class=\"sql keyword\">VALUES<\/code> <code class=\"sql keyword\">WITH<\/code> <code class=\"sql plain\">(modulus 10, remainder 6),<\/code><\/div>\n<div class=\"line number19 index18 alt2\"><code class=\"sql spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"sql plain\">dept_8 <\/code><code class=\"sql keyword\">FOR<\/code> <code class=\"sql keyword\">VALUES<\/code> <code class=\"sql keyword\">WITH<\/code> <code class=\"sql plain\">(modulus 10, remainder 7),<\/code><\/div>\n<div class=\"line number20 index19 alt1\"><code class=\"sql spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"sql plain\">dept_9 <\/code><code class=\"sql keyword\">FOR<\/code> <code class=\"sql keyword\">VALUES<\/code> <code class=\"sql keyword\">WITH<\/code> <code class=\"sql plain\">(modulus 10, remainder 8)<\/code><\/div>\n<div class=\"line number21 index20 alt2\"><\/div>\n<div class=\"line number22 index21 alt1\"><code class=\"sql plain\">(postgres@[<\/code><code class=\"sql keyword\">local<\/code><code class=\"sql plain\">]:5432) [test] &gt;<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Now let\u2019s insert some rows in the table dept<\/p>\n<div>\n<div id=\"highlighter_695267\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql plain\">(postgres@[<\/code><code class=\"sql keyword\">local<\/code><code class=\"sql plain\">]:5432) [test] &gt; <\/code><code class=\"sql keyword\">insert<\/code> <code class=\"sql keyword\">into<\/code> <code class=\"sql plain\">dept (<\/code><code class=\"sql keyword\">select<\/code> <code class=\"sql plain\">generate_series(0,200000));<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"sql keyword\">INSERT<\/code> <code class=\"sql plain\">0 200001<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"sql plain\">(postgres@[<\/code><code class=\"sql keyword\">local<\/code><code class=\"sql plain\">]:5432) [test] &gt;<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>We can verify that rows are not in the base table<\/p>\n<div>\n<div id=\"highlighter_991262\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<div class=\"line number7 index6 alt2\">7<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql plain\">(postgres@[<\/code><code class=\"sql keyword\">local<\/code><code class=\"sql plain\">]:5432) [test] &gt; <\/code><code class=\"sql keyword\">select<\/code> <code class=\"sql color2\">count<\/code><code class=\"sql plain\">(*) <\/code><code class=\"sql keyword\">from<\/code>\u00a0 <code class=\"sql keyword\">only<\/code> <code class=\"sql plain\">dept ;<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"sql spaces\">\u00a0<\/code><code class=\"sql color2\">count<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"sql comments\">-------<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"sql spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"sql plain\">0<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"sql plain\">(1 row)<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"sql plain\">(postgres@[<\/code><code class=\"sql keyword\">local<\/code><code class=\"sql plain\">]:5432) [test] &gt;<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>But that row are in the partitions<\/p>\n<div>\n<div id=\"highlighter_229559\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql plain\">(postgres@[<\/code><code class=\"sql keyword\">local<\/code><code class=\"sql plain\">]:5432) [test] &gt; <\/code><code class=\"sql keyword\">select<\/code> <code class=\"sql color2\">count<\/code><code class=\"sql plain\">(*) <\/code><code class=\"sql keyword\">from<\/code>\u00a0 <code class=\"sql plain\">dept ;<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"sql spaces\">\u00a0<\/code><code class=\"sql color2\">count<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"sql comments\">--------<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"sql spaces\">\u00a0<\/code><code class=\"sql plain\">200001<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"sql plain\">(1 row)<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>What we can also observe it that rows are uniformly distributed among partitions. This distribution is automatically done by the hash algorithm.<\/p>\n<div>\n<div id=\"highlighter_143427\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<div class=\"line number7 index6 alt2\">7<\/div>\n<div class=\"line number8 index7 alt1\">8<\/div>\n<div class=\"line number9 index8 alt2\">9<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<div class=\"line number16 index15 alt1\">16<\/div>\n<div class=\"line number17 index16 alt2\">17<\/div>\n<div class=\"line number18 index17 alt1\">18<\/div>\n<div class=\"line number19 index18 alt2\">19<\/div>\n<div class=\"line number20 index19 alt1\">20<\/div>\n<div class=\"line number21 index20 alt2\">21<\/div>\n<div class=\"line number22 index21 alt1\">22<\/div>\n<div class=\"line number23 index22 alt2\">23<\/div>\n<div class=\"line number24 index23 alt1\">24<\/div>\n<div class=\"line number25 index24 alt2\">25<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql plain\">(postgres@[<\/code><code class=\"sql keyword\">local<\/code><code class=\"sql plain\">]:5432) [test] &gt; <\/code><code class=\"sql keyword\">select<\/code> <code class=\"sql color2\">count<\/code><code class=\"sql plain\">(*) <\/code><code class=\"sql keyword\">from<\/code>\u00a0 <code class=\"sql keyword\">only<\/code> <code class=\"sql plain\">dept_1 ;<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"sql spaces\">\u00a0<\/code><code class=\"sql color2\">count<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"sql comments\">-------<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"sql spaces\">\u00a0<\/code><code class=\"sql plain\">19982<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"sql plain\">(1 row)<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"sql spaces\">\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\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"sql plain\">(postgres@[<\/code><code class=\"sql keyword\">local<\/code><code class=\"sql plain\">]:5432) [test] &gt; <\/code><code class=\"sql keyword\">select<\/code> <code class=\"sql color2\">count<\/code><code class=\"sql plain\">(*) <\/code><code class=\"sql keyword\">from<\/code>\u00a0 <code class=\"sql keyword\">only<\/code> <code class=\"sql plain\">dept_2 ;<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"sql spaces\">\u00a0<\/code><code class=\"sql color2\">count<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"sql comments\">-------<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"sql spaces\">\u00a0<\/code><code class=\"sql plain\">20199<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"sql plain\">(1 row)<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"sql plain\">(postgres@[<\/code><code class=\"sql keyword\">local<\/code><code class=\"sql plain\">]:5432) [test] &gt; <\/code><code class=\"sql keyword\">select<\/code> <code class=\"sql color2\">count<\/code><code class=\"sql plain\">(*) <\/code><code class=\"sql keyword\">from<\/code>\u00a0 <code class=\"sql keyword\">only<\/code> <code class=\"sql plain\">dept_3 ;<\/code><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"sql spaces\">\u00a0<\/code><code class=\"sql color2\">count<\/code><\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"sql comments\">-------<\/code><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"sql spaces\">\u00a0<\/code><code class=\"sql plain\">19770<\/code><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"sql plain\">(1 row)<\/code><\/div>\n<div class=\"line number18 index17 alt1\"><\/div>\n<div class=\"line number19 index18 alt2\"><code class=\"sql plain\">(postgres@[<\/code><code class=\"sql keyword\">local<\/code><code class=\"sql plain\">]:5432) [test] &gt; <\/code><code class=\"sql keyword\">select<\/code> <code class=\"sql color2\">count<\/code><code class=\"sql plain\">(*) <\/code><code class=\"sql keyword\">from<\/code>\u00a0 <code class=\"sql keyword\">only<\/code> <code class=\"sql plain\">dept_5 ;<\/code><\/div>\n<div class=\"line number20 index19 alt1\"><code class=\"sql spaces\">\u00a0<\/code><code class=\"sql color2\">count<\/code><\/div>\n<div class=\"line number21 index20 alt2\"><code class=\"sql comments\">-------<\/code><\/div>\n<div class=\"line number22 index21 alt1\"><code class=\"sql spaces\">\u00a0<\/code><code class=\"sql plain\">20068<\/code><\/div>\n<div class=\"line number23 index22 alt2\"><code class=\"sql plain\">(1 row)<\/code><\/div>\n<div class=\"line number24 index23 alt1\"><\/div>\n<div class=\"line number25 index24 alt2\"><code class=\"sql plain\">(postgres@[<\/code><code class=\"sql keyword\">local<\/code><code class=\"sql plain\">]:5432) [test] &gt;<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>By Mouhamadou Diaw PostgreSQL 10 comes with partition support. But Hash Partitioning was not supported. PostgreSQL 11 will support Hash Partition. In the documentation we can read The table is partitioned by specifying a modulus and a remainder for each partition. Each partition will hold the rows for which the hash value of the partition [&hellip;]<\/p>\n","protected":false},"author":27,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[229],"tags":[1322,77,1323],"type_dbi":[],"class_list":["post-11044","post","type-post","status-publish","format-standard","hentry","category-database-administration-monitoring","tag-hash-partitioning","tag-postgresql","tag-postgresql-11"],"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>Hash Partitioning in PostgreSQL 11 - dbi Blog<\/title>\n<meta name=\"description\" content=\"PostgreSQL 11, Hash Partition, Modulus, Remainder\" \/>\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\/hash-partitioning-in-postgresql-11\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Hash Partitioning in PostgreSQL 11\" \/>\n<meta property=\"og:description\" content=\"PostgreSQL 11, Hash Partition, Modulus, Remainder\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/hash-partitioning-in-postgresql-11\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-03-23T11:45:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-06-09T14:56:17+00:00\" \/>\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=\"3 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\/hash-partitioning-in-postgresql-11\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/hash-partitioning-in-postgresql-11\/\"},\"author\":{\"name\":\"Oracle Team\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\"},\"headline\":\"Hash Partitioning in PostgreSQL 11\",\"datePublished\":\"2018-03-23T11:45:28+00:00\",\"dateModified\":\"2023-06-09T14:56:17+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/hash-partitioning-in-postgresql-11\/\"},\"wordCount\":148,\"commentCount\":0,\"keywords\":[\"Hash Partitioning\",\"PostgreSQL\",\"PostgreSQL 11\"],\"articleSection\":[\"Database Administration &amp; Monitoring\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/hash-partitioning-in-postgresql-11\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/hash-partitioning-in-postgresql-11\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/hash-partitioning-in-postgresql-11\/\",\"name\":\"Hash Partitioning in PostgreSQL 11 - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"datePublished\":\"2018-03-23T11:45:28+00:00\",\"dateModified\":\"2023-06-09T14:56:17+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\"},\"description\":\"PostgreSQL 11, Hash Partition, Modulus, Remainder\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/hash-partitioning-in-postgresql-11\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/hash-partitioning-in-postgresql-11\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/hash-partitioning-in-postgresql-11\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Hash Partitioning in PostgreSQL 11\"}]},{\"@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":"Hash Partitioning in PostgreSQL 11 - dbi Blog","description":"PostgreSQL 11, Hash Partition, Modulus, Remainder","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\/hash-partitioning-in-postgresql-11\/","og_locale":"en_US","og_type":"article","og_title":"Hash Partitioning in PostgreSQL 11","og_description":"PostgreSQL 11, Hash Partition, Modulus, Remainder","og_url":"https:\/\/www.dbi-services.com\/blog\/hash-partitioning-in-postgresql-11\/","og_site_name":"dbi Blog","article_published_time":"2018-03-23T11:45:28+00:00","article_modified_time":"2023-06-09T14:56:17+00:00","author":"Oracle Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Oracle Team","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/hash-partitioning-in-postgresql-11\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/hash-partitioning-in-postgresql-11\/"},"author":{"name":"Oracle Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"headline":"Hash Partitioning in PostgreSQL 11","datePublished":"2018-03-23T11:45:28+00:00","dateModified":"2023-06-09T14:56:17+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/hash-partitioning-in-postgresql-11\/"},"wordCount":148,"commentCount":0,"keywords":["Hash Partitioning","PostgreSQL","PostgreSQL 11"],"articleSection":["Database Administration &amp; Monitoring"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/hash-partitioning-in-postgresql-11\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/hash-partitioning-in-postgresql-11\/","url":"https:\/\/www.dbi-services.com\/blog\/hash-partitioning-in-postgresql-11\/","name":"Hash Partitioning in PostgreSQL 11 - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2018-03-23T11:45:28+00:00","dateModified":"2023-06-09T14:56:17+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"description":"PostgreSQL 11, Hash Partition, Modulus, Remainder","breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/hash-partitioning-in-postgresql-11\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/hash-partitioning-in-postgresql-11\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/hash-partitioning-in-postgresql-11\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Hash Partitioning in PostgreSQL 11"}]},{"@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\/11044","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=11044"}],"version-history":[{"count":1,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/11044\/revisions"}],"predecessor-version":[{"id":25767,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/11044\/revisions\/25767"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=11044"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=11044"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=11044"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=11044"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}