{"id":11440,"date":"2018-07-14T04:17:57","date_gmt":"2018-07-14T02:17:57","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/pgday-amsterdam-follow-up-2-where-do-null-values-go-to-in-a-hash-partitioned-table\/"},"modified":"2018-07-14T04:17:57","modified_gmt":"2018-07-14T02:17:57","slug":"pgday-amsterdam-follow-up-2-where-do-null-values-go-to-in-a-hash-partitioned-table","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/pgday-amsterdam-follow-up-2-where-do-null-values-go-to-in-a-hash-partitioned-table\/","title":{"rendered":"PGDay Amsterdam &#8211; follow up 2 &#8211; Where do null values go to in a hash partitioned table?"},"content":{"rendered":"<p>This is the second follow up which covers this question: When you hash partition a table in PostgreSQL 11 where do null values for the partitioned column go to? Lets go&#8230;<\/p>\n<p><!--more--><\/p>\n<p>In the demo I used this little table:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# select version();\n                                                            version                                                          \n-----------------------------------------------------------------------------------------------------------------------------\n PostgreSQL 11beta1 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-28), 64-bi\n(1 row)\npostgres=# create table part2 ( a int, list varchar(10) ) partition by hash (a);\nCREATE TABLE\npostgres=# create table part2_1 partition of part2 FOR VALUES WITH (MODULUS 3, REMAINDER 0);\nCREATE TABLE\npostgres=# create table part2_2 partition of part2 FOR VALUES WITH (MODULUS 3, REMAINDER 1);\nCREATE TABLE\npostgres=# create table part2_3 partition of part2 FOR VALUES WITH (MODULUS 3, REMAINDER 2);\nCREATE TABLE\npostgres=# d+ part2\n                                          Table \"public.part2\"\n Column |         Type          | Collation | Nullable | Default | Storage  | Stats target | Description \n--------+-----------------------+-----------+----------+---------+----------+--------------+-------------\n a      | integer               |           |          |         | plain    |              | \n list   | character varying(10) |           |          |         | extended |              | \nPartition key: HASH (a)\nPartitions: part2_1 FOR VALUES WITH (modulus 3, remainder 0),\n            part2_2 FOR VALUES WITH (modulus 3, remainder 1),\n            part2_3 FOR VALUES WITH (modulus 3, remainder 2)\n<\/pre>\n<p>The data we played with was this:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# insert into part2 (a,list) values (1,'beer');\nINSERT 0 1\npostgres=# insert into part2 (a,list) values (2,'whine');\nINSERT 0 1\npostgres=# insert into part2 (a,list) values (3,'schnaps');\nINSERT 0 1\npostgres=# select * from only part2_1;\n a | list  \n---+-------\n 2 | whine\n(1 row)\n\npostgres=# select * from only part2_2;\n a |  list   \n---+---------\n 3 | schnaps\n(1 row)\n\npostgres=# select * from only part2_3;\n a | list \n---+------\n 1 | beer\n(1 row)\n<\/pre>\n<p>We have the data evenly distributed over the three partitions. When we insert a row which contains a NULL value for the column we partitioned on:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# insert into part2 (a,list) values (null,'cocktail');\nINSERT 0 1\n<\/pre>\n<p>&#8230; where does that column go to?<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# select * from only part2_1;\n a |   list   \n---+----------\n 2 | whine\n   | cocktail\n(2 rows)\n\npostgres=# select * from only part2_2;\n a |  list   \n---+---------\n 3 | schnaps\n(1 row)\n\npostgres=# select * from only part2_3;\n a | list \n---+------\n 1 | beer\n(1 row)\n<\/pre>\n<p>It goes to the first partition and every following NULL key row gets there as well:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# insert into part2 (a,list) values (null,'rum');\nINSERT 0 1\npostgres=# select * from only part2_1;\n a |   list   \n---+----------\n 2 | whine\n   | cocktail\n   | rum\n(3 rows)\n<\/pre>\n<p>I couldn&#8217;t find anything in the documentation about that so I did send a mail to the general mailing list and here is the answer: <a href=\"https:\/\/www.postgresql.org\/message-id\/flat\/CAAJ_b94Y%2BajsqGs0tFw9hnX8h-u2mfZdZy5LcbG05_2DCJOXig%40mail.gmail.com#0fdfd528f7867b37abcb2145082a993d\" target=\"_blank\" rel=\"noopener\">&#8220;The calculated hash value for the null value will be zero, therefore, it will fall to the partition having remainder zero.&#8221;<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This is the second follow up which covers this question: When you hash partition a table in PostgreSQL 11 where do null values for the partitioned column go to? Lets go&#8230;<\/p>\n","protected":false},"author":29,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[229],"tags":[77],"type_dbi":[],"class_list":["post-11440","post","type-post","status-publish","format-standard","hentry","category-database-administration-monitoring","tag-postgresql"],"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>PGDay Amsterdam - follow up 2 - Where do null values go to in a hash partitioned table? - dbi Blog<\/title>\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\/pgday-amsterdam-follow-up-2-where-do-null-values-go-to-in-a-hash-partitioned-table\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PGDay Amsterdam - follow up 2 - Where do null values go to in a hash partitioned table?\" \/>\n<meta property=\"og:description\" content=\"This is the second follow up which covers this question: When you hash partition a table in PostgreSQL 11 where do null values for the partitioned column go to? Lets go&#8230;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/pgday-amsterdam-follow-up-2-where-do-null-values-go-to-in-a-hash-partitioned-table\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-07-14T02:17:57+00:00\" \/>\n<meta name=\"author\" content=\"Daniel Westermann\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@westermanndanie\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Daniel Westermann\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 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\/pgday-amsterdam-follow-up-2-where-do-null-values-go-to-in-a-hash-partitioned-table\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/pgday-amsterdam-follow-up-2-where-do-null-values-go-to-in-a-hash-partitioned-table\/\"},\"author\":{\"name\":\"Daniel Westermann\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"headline\":\"PGDay Amsterdam &#8211; follow up 2 &#8211; Where do null values go to in a hash partitioned table?\",\"datePublished\":\"2018-07-14T02:17:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/pgday-amsterdam-follow-up-2-where-do-null-values-go-to-in-a-hash-partitioned-table\/\"},\"wordCount\":157,\"commentCount\":0,\"keywords\":[\"PostgreSQL\"],\"articleSection\":[\"Database Administration &amp; Monitoring\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/pgday-amsterdam-follow-up-2-where-do-null-values-go-to-in-a-hash-partitioned-table\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/pgday-amsterdam-follow-up-2-where-do-null-values-go-to-in-a-hash-partitioned-table\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/pgday-amsterdam-follow-up-2-where-do-null-values-go-to-in-a-hash-partitioned-table\/\",\"name\":\"PGDay Amsterdam - follow up 2 - Where do null values go to in a hash partitioned table? - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"datePublished\":\"2018-07-14T02:17:57+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/pgday-amsterdam-follow-up-2-where-do-null-values-go-to-in-a-hash-partitioned-table\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/pgday-amsterdam-follow-up-2-where-do-null-values-go-to-in-a-hash-partitioned-table\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/pgday-amsterdam-follow-up-2-where-do-null-values-go-to-in-a-hash-partitioned-table\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PGDay Amsterdam &#8211; follow up 2 &#8211; Where do null values go to in a hash partitioned table?\"}]},{\"@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\/8d08e9bd996a89bd75c0286cbabf3c66\",\"name\":\"Daniel Westermann\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g\",\"caption\":\"Daniel Westermann\"},\"description\":\"Daniel Westermann is Principal Consultant and Technology Leader Open Infrastructure at dbi services. He has more than 15 years of experience in management, engineering and optimization of databases and infrastructures, especially on Oracle and PostgreSQL. Since the beginning of his career, he has specialized in Oracle Technologies and is Oracle Certified Professional 12c and Oracle Certified Expert RAC\/GridInfra. Over time, Daniel has become increasingly interested in open source technologies, becoming \u201cTechnology Leader Open Infrastructure\u201d and PostgreSQL expert. \u00a0Based on community or EnterpriseDB tools, he develops and installs complex high available solutions with PostgreSQL. He is also a certified PostgreSQL Plus 9.0 Professional and a Postgres Advanced Server 9.4 Professional. He is a regular speaker at PostgreSQL conferences in Switzerland and Europe. Today Daniel is also supporting our customers on AWS services such as AWS RDS, database migrations into the cloud, EC2 and automated infrastructure management with AWS SSM (System Manager). He is a certified AWS Solutions Architect Professional. Prior to dbi services, Daniel was Management System Engineer at LC SYSTEMS-Engineering AG in Basel. Before that, he worked as Oracle Developper &amp;\u00a0Project Manager at Delta Energy Solutions AG in Basel (today Powel AG). Daniel holds a diploma in Business Informatics (DHBW, Germany). His branch-related experience mainly covers the pharma industry, the financial sector, energy, lottery and telecommunications.\",\"sameAs\":[\"https:\/\/x.com\/westermanndanie\"],\"url\":\"https:\/\/www.dbi-services.com\/blog\/author\/daniel-westermann\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"PGDay Amsterdam - follow up 2 - Where do null values go to in a hash partitioned table? - dbi Blog","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\/pgday-amsterdam-follow-up-2-where-do-null-values-go-to-in-a-hash-partitioned-table\/","og_locale":"en_US","og_type":"article","og_title":"PGDay Amsterdam - follow up 2 - Where do null values go to in a hash partitioned table?","og_description":"This is the second follow up which covers this question: When you hash partition a table in PostgreSQL 11 where do null values for the partitioned column go to? Lets go&#8230;","og_url":"https:\/\/www.dbi-services.com\/blog\/pgday-amsterdam-follow-up-2-where-do-null-values-go-to-in-a-hash-partitioned-table\/","og_site_name":"dbi Blog","article_published_time":"2018-07-14T02:17:57+00:00","author":"Daniel Westermann","twitter_card":"summary_large_image","twitter_creator":"@westermanndanie","twitter_misc":{"Written by":"Daniel Westermann","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/pgday-amsterdam-follow-up-2-where-do-null-values-go-to-in-a-hash-partitioned-table\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/pgday-amsterdam-follow-up-2-where-do-null-values-go-to-in-a-hash-partitioned-table\/"},"author":{"name":"Daniel Westermann","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"headline":"PGDay Amsterdam &#8211; follow up 2 &#8211; Where do null values go to in a hash partitioned table?","datePublished":"2018-07-14T02:17:57+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/pgday-amsterdam-follow-up-2-where-do-null-values-go-to-in-a-hash-partitioned-table\/"},"wordCount":157,"commentCount":0,"keywords":["PostgreSQL"],"articleSection":["Database Administration &amp; Monitoring"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/pgday-amsterdam-follow-up-2-where-do-null-values-go-to-in-a-hash-partitioned-table\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/pgday-amsterdam-follow-up-2-where-do-null-values-go-to-in-a-hash-partitioned-table\/","url":"https:\/\/www.dbi-services.com\/blog\/pgday-amsterdam-follow-up-2-where-do-null-values-go-to-in-a-hash-partitioned-table\/","name":"PGDay Amsterdam - follow up 2 - Where do null values go to in a hash partitioned table? - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2018-07-14T02:17:57+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/pgday-amsterdam-follow-up-2-where-do-null-values-go-to-in-a-hash-partitioned-table\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/pgday-amsterdam-follow-up-2-where-do-null-values-go-to-in-a-hash-partitioned-table\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/pgday-amsterdam-follow-up-2-where-do-null-values-go-to-in-a-hash-partitioned-table\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"PGDay Amsterdam &#8211; follow up 2 &#8211; Where do null values go to in a hash partitioned table?"}]},{"@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\/8d08e9bd996a89bd75c0286cbabf3c66","name":"Daniel Westermann","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g","caption":"Daniel Westermann"},"description":"Daniel Westermann is Principal Consultant and Technology Leader Open Infrastructure at dbi services. He has more than 15 years of experience in management, engineering and optimization of databases and infrastructures, especially on Oracle and PostgreSQL. Since the beginning of his career, he has specialized in Oracle Technologies and is Oracle Certified Professional 12c and Oracle Certified Expert RAC\/GridInfra. Over time, Daniel has become increasingly interested in open source technologies, becoming \u201cTechnology Leader Open Infrastructure\u201d and PostgreSQL expert. \u00a0Based on community or EnterpriseDB tools, he develops and installs complex high available solutions with PostgreSQL. He is also a certified PostgreSQL Plus 9.0 Professional and a Postgres Advanced Server 9.4 Professional. He is a regular speaker at PostgreSQL conferences in Switzerland and Europe. Today Daniel is also supporting our customers on AWS services such as AWS RDS, database migrations into the cloud, EC2 and automated infrastructure management with AWS SSM (System Manager). He is a certified AWS Solutions Architect Professional. Prior to dbi services, Daniel was Management System Engineer at LC SYSTEMS-Engineering AG in Basel. Before that, he worked as Oracle Developper &amp;\u00a0Project Manager at Delta Energy Solutions AG in Basel (today Powel AG). Daniel holds a diploma in Business Informatics (DHBW, Germany). His branch-related experience mainly covers the pharma industry, the financial sector, energy, lottery and telecommunications.","sameAs":["https:\/\/x.com\/westermanndanie"],"url":"https:\/\/www.dbi-services.com\/blog\/author\/daniel-westermann\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/11440","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\/29"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=11440"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/11440\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=11440"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=11440"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=11440"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=11440"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}