Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.92) (envelope-from ) id 1jDCfy-0005sM-JW for pgsql-docs@arkaria.postgresql.org; Sat, 14 Mar 2020 19:42:26 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1jDCfx-0005hm-2f for pgsql-docs@arkaria.postgresql.org; Sat, 14 Mar 2020 19:42:25 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1jDCfw-0005he-Nr for pgsql-docs@lists.postgresql.org; Sat, 14 Mar 2020 19:42:24 +0000 Received: from momjian.us ([72.94.173.45]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jDCfu-0006R4-4u for pgsql-docs@lists.postgresql.org; Sat, 14 Mar 2020 19:42:23 +0000 Received: from bruce by momjian.us with local (Exim 4.92) (envelope-from ) id 1jDCfs-0002eX-JG; Sat, 14 Mar 2020 15:42:20 -0400 Date: Sat, 14 Mar 2020 15:42:20 -0400 From: Bruce Momjian To: tanay.purnaye@gmail.com, pgsql-docs@lists.postgresql.org Subject: Re: Examples required in || 5.10. Table Partitioning Message-ID: <20200314194220.GA22336@momjian.us> References: <158099182679.1093.11650509001908549339@wrigleys.postgresql.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <158099182679.1093.11650509001908549339@wrigleys.postgresql.org> User-Agent: Mutt/1.10.1 (2018-07-13) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk On Thu, Feb 6, 2020 at 12:23:46PM +0000, PG Doc comments form wrote: > The following documentation comment has been logged on the website: > > Page: https://www.postgresql.org/docs/12/ddl-partitioning.html > Description: > > Hello , > > As I'm searching for the official documentation of Hash Partition and List > Partition with example with more description the only information is found > is as below : > > List Partitioning > The table is partitioned by explicitly listing which key values appear in > each partition. > > Hash Partitioning > 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. > > But how to create and manage these above 2 partition is not explained in > documentation properly officially.for further information related to these 2 > partition we need to search private blogs,because of lack of information > provided in the documentation 5.10. Table Partitioning I only saw the Range > partition example throughout the Table Partitioning . > > I request you to modify the 5.10. Table Partitioning section and make it > more informative as Table Partition is very important in PostgreSQL . Well, there are examples in the CREATE TABLE manual page: https://www.postgresql.org/docs/12/sql-createtable.html When creating a hash partition, a modulus and remainder must be specified. The modulus must be a positive integer, and the remainder must be a non-negative integer less than the modulus. Typically, when initially setting up a hash-partitioned table, you should choose a modulus equal to the number of partitions and assign every table the same modulus and a different remainder (see examples, below). However, it is not required that every partition have the same modulus, only that every modulus which occurs among the partitions of a hash-partitioned table is a factor of the next larger modulus. This allows the number of partitions to be increased incrementally without needing to move all the data at once. For example, suppose you have a hash-partitioned table with 8 partitions, each of which has modulus 8, but find it necessary to increase the number of partitions to 16. You can detach one of the modulus-8 partitions, create two new modulus-16 partitions covering the same portion of the key space (one with a remainder equal to the remainder of the detached partition, and the other with a remainder equal to that value plus 8), and repopulate them with data. You can then repeat this -- perhaps at a later time -- for each modulus-8 partition until none remain. While this may still involve a large amount of data movement at each step, it is still better than having to create a whole new table and move all the data at once. CREATE TABLE orders ( order_id bigint not null, cust_id bigint not null, status text ) PARTITION BY HASH (order_id); CREATE TABLE orders_p1 PARTITION OF orders FOR VALUES WITH (MODULUS 4, REMAINDER 0); CREATE TABLE orders_p2 PARTITION OF orders FOR VALUES WITH (MODULUS 4, REMAINDER 1); CREATE TABLE orders_p3 PARTITION OF orders FOR VALUES WITH (MODULUS 4, REMAINDER 2); CREATE TABLE orders_p4 PARTITION OF orders FOR VALUES WITH (MODULUS 4, REMAINDER 3); CREATE TABLE cities ( city_id bigserial not null, name text not null, population bigint ) PARTITION BY LIST (left(lower(name), 1)); CREATE TABLE cities_ab PARTITION OF cities ( CONSTRAINT city_id_nonzero CHECK (city_id != 0) ) FOR VALUES IN ('a', 'b'); Is that sufficient? -- Bruce Momjian https://momjian.us EnterpriseDB https://enterprisedb.com + As you are, so once was I. As I am, so you will be. + + Ancient Roman grave inscription +