{"id":14429,"date":"2019-12-30T13:52:18","date_gmt":"2019-12-30T13:52:18","guid":{"rendered":"https:\/\/dbtut.com\/?p=14429"},"modified":"2021-02-09T10:23:50","modified_gmt":"2021-02-09T10:23:50","slug":"table-partitioning-in-postgresql-11-2","status":"publish","type":"post","link":"https:\/\/dbtut.com\/index.php\/2019\/12\/30\/table-partitioning-in-postgresql-11-2\/","title":{"rendered":"Table Partitioning in PostgreSQL 11.2"},"content":{"rendered":"<p>This article contains information about table partitioning in PostgreSQL.<\/p>\n<p>We will look at the answers for the questions;<\/p>\n<ul>\n<li>What is partition in PostgreSQL<\/li>\n<li><span style=\"font-size: 1.125rem; font-family: var(--text-font);\">What are the advantages of Table Partitioning in PostgreSQL<\/span><\/li>\n<li><span style=\"font-size: 1.125rem; font-family: var(--text-font);\">PostgreSQL Partition Types<\/span><\/li>\n<\/ul>\n<h2>What is Partition in PostgreSQL?<\/h2>\n<p>We will be discussing the table partitioning in PostgreSQL 11.2. The partitioning method used before PostgreSQL 10 was very manual and problematic. Imagine that before version 10, Trigger was used to transfer data to the corresponding partition. Imagine how old it is.<\/p>\n<p>Partitioning the table according to certain criteria is called partitioning. The main table we partitioned is called master and each partition are called child.<\/p>\n<h2>What are the advantages of Table Partitioning in PostgreSQL?<\/h2>\n<ul>\n<li>Improves query performance. (Since the queries read the data only from the relevant partition, query result will be faster.)<\/li>\n<li>Index cost and Size are decreasing. We reduce the size of our indexes and decrease the index fragmentation by creating an index in the relevant partition only.<\/li>\n<li>We will be able to manage our Bulk operations healthier and faster.<\/li>\n<\/ul>\n<h2>Partition Types in PostgreSQL<\/h2>\n<p>You can find the partition types in postgresql below.<\/p>\n<h3>LIST PARTITION in PostgreSQL<\/h3>\n<p>The table is partitioned according to the key value of the partition column. For Example, suppose that you have a table that contains person name and country information and you want to create a partition according to the country column&#8217;s value. You can perform this operation by using LIST PARTITION.<\/p>\n<h4>PostgreSQL List Partition Example<\/h4>\n<p>First execute the command <code>\\x<\/code> for user friendly screen.<\/p>\n<pre class=\"lang:default decode:true\">CREATE TABLE person\r\n(\r\n  personname  varchar(100),\r\n  country     varchar(100)\r\n)\r\nPARTITION BY LIST(country);\r\nCREATE TABLE EUROPE PARTITION of person FOR VALUES IN('GERMANY','SPAIN');\r\nCREATE TABLE ASIA PARTITION of person FOR VALUES IN('TURKEY','INDIA');\r\nCREATE TABLE AFRICA PARTITION of person FOR VALUES IN('ANGOLA','BENIN');\r\nCREATE TABLE NORTHAMERICA PARTITION of person FOR VALUES IN('US','MEXICO');\r\nCREATE TABLE SOUTHAMERICA PARTITION of person FOR VALUES IN('ARGENTINA','ECUADOR');\r\nCREATE TABLE AUSTRALIA PARTITION of person FOR VALUES IN('AUSTRALIA','FIJI');<\/pre>\n<p>Then check partitions created successfully; Write your table name instead of person in the below script if your table name is different.<\/p>\n<pre class=\"lang:default decode:true \">select pt.relname as partition_name,\r\n       pg_get_expr(pt.relpartbound, pt.oid, true) as partition_expression\r\nfrom pg_class base_tb \r\n  join pg_inherits i on i.inhparent = base_tb.oid \r\n  join pg_class pt on pt.oid = i.inhrelid\r\nwhere base_tb.oid = 'public.person'::regclass;<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-14439 aligncenter\" src=\"https:\/\/dbtut.com\/wp-content\/uploads\/2019\/12\/Ads\u0131z-26.png\" alt=\"\" width=\"571\" height=\"268\" \/><\/p>\n<p>Insert new records to ASIA partition. The following data will be inserted to ASIA partition. Because the values TURKEY and INDIA is in the ASIA partition.<\/p>\n<pre class=\"lang:default decode:true\">INSERT INTO person VALUES ('Nurullah CAKIR', 'TURKEY');\r\nINSERT INTO person VALUES ('Ahmad ANSAR', 'INDIA');<\/pre>\n<h4>Get Row Count in Each Partititions<\/h4>\n<pre class=\"lang:default decode:true\">SELECT tableoid::regclass AS source, count(*) FROM person GROUP BY source;<\/pre>\n<h2><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-14443 aligncenter\" src=\"https:\/\/dbtut.com\/wp-content\/uploads\/2019\/12\/Ads\u0131z-27.png\" alt=\"\" width=\"592\" height=\"134\" \/><\/h2>\n<p>Then insert new records to other partitions to see the distribution.<\/p>\n<pre class=\"lang:default decode:true\">INSERT INTO person VALUES ('John TRAVOLTA', 'US');\r\nINSERT INTO person VALUES ('Diego Maradona', 'ARGENTINA');<\/pre>\n<h2><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-14449 aligncenter\" src=\"https:\/\/dbtut.com\/wp-content\/uploads\/2019\/12\/Ads\u0131z-28.png\" alt=\"\" width=\"620\" height=\"209\" \/><\/h2>\n<h2>RANGE PARTITION in PostgreSQL<\/h2>\n<p>Table partitioning is performed according to a range according to the specified criteria. For example, we can create a range partition according to a specific date range, or we can create a range partition using a range according to other data types.<\/p>\n<h4>PostgreSQL Range Partition Example<\/h4>\n<p>Let&#8217;s create our demo table at first.<\/p>\n<pre class=\"lang:default decode:true\">CREATE TABLE sales (\r\n id serial,\r\n sales_count int,\r\n sales_date date not null\r\n) PARTITION BY RANGE (sales_date);<\/pre>\n<p>We have specified partition type and partition column above. PARTITION BY RANGE (sales_date)<\/p>\n<p>Now let&#8217;s create our Partitions. Since we will create partitions monthly, we divide our table into 12 for the last 1 year.<\/p>\n<pre class=\"lang:default decode:true\">CREATE TABLE sales_2019_01 PARTITION OF sales\r\nFOR VALUES FROM ('2019-01-01') TO ('2019-02-01');\r\n \r\nCREATE TABLE sales_2019_02 PARTITION OF sales\r\nFOR VALUES FROM ('2019-02-01') TO ('2019-03-01');\r\n \r\nCREATE TABLE sales_2019_03 PARTITION OF sales\r\nFOR VALUES FROM ('2019-03-01') TO ('2019-04-01');\r\n \r\nCREATE TABLE sales_2019_04 PARTITION OF sales\r\nFOR VALUES FROM ('2019-04-01') TO ('2019-05-01');\r\n \r\nCREATE TABLE sales_2019_05 PARTITION OF sales\r\nFOR VALUES FROM ('2019-05-01') TO ('2019-06-01');\r\n \r\nCREATE TABLE sales_2019_06 PARTITION OF sales\r\nFOR VALUES FROM ('2019-06-01') TO ('2019-07-01');\r\n \r\nCREATE TABLE sales_2019_07 PARTITION OF sales\r\nFOR VALUES FROM ('2019-07-01') TO ('2019-08-01');\r\n \r\nCREATE TABLE sales_2019_08 PARTITION OF sales\r\nFOR VALUES FROM ('2019-08-01') TO ('2019-09-01');\r\n \r\nCREATE TABLE sales_2019_09 PARTITION OF sales\r\nFOR VALUES FROM ('2019-09-01') TO ('2019-10-01');\r\n \r\nCREATE TABLE sales_2019_10 PARTITION OF sales\r\nFOR VALUES FROM ('2019-10-01') TO ('2019-11-01');\r\n \r\nCREATE TABLE sales_2019_11 PARTITION OF sales\r\nFOR VALUES FROM ('2019-11-01') TO ('2019-12-01');\r\n \r\nCREATE TABLE sales_2019_12 PARTITION OF sales\r\nFOR VALUES FROM ('2019-12-01') TO ('2020-01-01');<\/pre>\n<h4>Check Partitions in PostgreSQL<\/h4>\n<p>After creating our partitions, let&#8217;s have a chek without inserting data.<\/p>\n<p>We can check the partitions we created with the help of the below script.<\/p>\n<pre class=\"lang:default decode:true\">SELECT nmsp_parent.nspname AS parent_schema,\r\n       parent.relname AS parent,\r\n       nmsp_child.nspname AS child_schema,\r\n       child.relname AS child\r\nFROM pg_inherits\r\nJOIN pg_class parent ON pg_inherits.inhparent = parent.oid\r\nJOIN pg_class child ON pg_inherits.inhrelid = child.oid\r\nJOIN pg_namespace nmsp_parent ON nmsp_parent.oid = parent.relnamespace\r\nJOIN pg_namespace nmsp_child ON nmsp_child.oid = child.relnamespace\r\nWHERE parent.relname='sales' ;<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-14454 aligncenter\" src=\"https:\/\/dbtut.com\/wp-content\/uploads\/2019\/12\/Ads\u0131z-29.png\" alt=\"\" width=\"565\" height=\"395\" \/><\/p>\n<p>After completing our checks, let&#8217;s insert data to our table.<\/p>\n<pre class=\"lang:default decode:true\">INSERT INTO sales (sales_count, sales_date) VALUES (50 , '2019-04-12');\r\nINSERT INTO sales (sales_count, sales_date) VALUES (80 , '2019-12-14');\r\nINSERT INTO sales (sales_count, sales_date) VALUES (70 , '2019-07-15');\r\nINSERT INTO sales (sales_count, sales_date) VALUES (75 , '2019-08-17');<\/pre>\n<p>Now let&#8217;s execute a query and check if our query brings data from the relevant partition.<\/p>\n<pre class=\"lang:default decode:true \">select sales_count from sales where sales_date between '2019-04-01' and '2019-05-01';<\/pre>\n<p>Now let&#8217;s check which partitions it use with <strong>EXPLAIN<\/strong>.<\/p>\n<pre class=\"lang:default decode:true\">explain select sales_count from sales where sales_date between '2019-04-01' and '2019-05-01';<\/pre>\n<p>When you execute the query, we see that it uses the sales_2019_04 and sales_2019_05 partitions.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-14459 aligncenter\" src=\"https:\/\/dbtut.com\/wp-content\/uploads\/2019\/12\/Ads\u0131z-30.png\" alt=\"\" width=\"707\" height=\"268\" \/><\/p>\n<h4>Get Row Count in Each Partition<\/h4>\n<pre class=\"lang:default decode:true\">SELECT tableoid::regclass AS source, count(*) FROM person GROUP BY source;<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-14462 aligncenter\" src=\"https:\/\/dbtut.com\/wp-content\/uploads\/2019\/12\/Ads\u0131z-31.png\" alt=\"\" width=\"571\" height=\"174\" \/><\/p>\n<h2>Hash PARTITION in PostgreSQL<\/h2>\n<p>In Hash Partition, data is transferred to partition tables according to the hash value of Partition Key(column you specified in PARTITION BY HASH statement). You can specify a single column or multiple columns when specifying the Partition Key. In order to distribute the data equally to partitions, you should take care that partition key is close to unique. It is created similar to the RANGE and LIST partition.<\/p>\n<p>There are MODULUS and REMAINDER concepts during the creation of partitions tables. The MODULUS value indicates how many partition tables we have. It is fixed for all partition tables and does not change.<\/p>\n<p>Since there are 10 partitions, REMAINDER can have a value from 0 to 9. If you do not specify the modulus and remainder values correctly, you will receive the below error.<\/p>\n<p><span style=\"background-color: #ffffff; color: #ff0000;\"><em>ERROR: every hash partition modulus must be a factor of the next larger modulus<\/em><\/span><\/p>\n<p>The hash value of the partition key used for the HASH partition is divided into MODULUS value and the data is transferred to the REMAINDER table pointed to by the remaining value.<\/p>\n<p>For Example, suppose that the hash value is 102. It divides 102 by 10. Here, the remaining value is 2. So, the data will go to the REMANDER 2 table.<\/p>\n<h4>PostgreSQL Hash Partition Example<\/h4>\n<p>In this example, we will use the same table structure as the List Partition Example. But the partition column will be PersonName. But do not use name column as hash partition column in your production environment. Because names are often not unique. Therefore, data is not evenly distributed across partitions.<\/p>\n<p><strong>Note:<\/strong> Do not forget person table we have created for previous example.<\/p>\n<pre class=\"lang:default decode:true \">CREATE TABLE person\r\n(\r\n  personname  varchar(100),   \r\n  country     varchar(100)\r\n)\r\nPARTITION BY HASH(PersonName);<\/pre>\n<pre class=\"lang:default decode:true \">CREATE TABLE hashpartition_0 PARTITION OF person FOR VALUES WITH (MODULUS 5, REMAINDER 0);\r\nCREATE TABLE hashpartition_1 PARTITION OF person FOR VALUES WITH (MODULUS 5, REMAINDER 1);\r\nCREATE TABLE hashpartition_2 PARTITION OF person FOR VALUES WITH (MODULUS 5, REMAINDER 2);\r\nCREATE TABLE hashpartition_3 PARTITION OF person FOR VALUES WITH (MODULUS 5, REMAINDER 3);\r\nCREATE TABLE hashpartition_4 PARTITION OF person FOR VALUES WITH (MODULUS 5, REMAINDER 4);<\/pre>\n<p>You can check partition is created with the command <code>\\d+ person<\/code><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-14474 aligncenter\" src=\"https:\/\/dbtut.com\/wp-content\/uploads\/2019\/12\/Ads\u0131z-32.png\" alt=\"\" width=\"781\" height=\"229\" \/><\/p>\n<p>Insert Into data to the table. Note that we insert 3 row and the names of the 2 rows are the same. This will cause the data not to be evenly distributed across partition tables.<\/p>\n<pre class=\"lang:default decode:true\">INSERT INTO person (personname, country) VALUES ('Nurullah CAKIR', 'TURKEY');\r\nINSERT INTO person (personname, country) VALUES ('Nurullah CAKIR', 'INDIA');\r\nINSERT INTO person (personname, country) VALUES ('John TRAVOLTA', 'US');<\/pre>\n<p>Select * from the main table and partition tables as below. You will see that there are no rows in the main table. Two rows will be on a partition because of two rows name value is the same and the other row will be in different partition.<\/p>\n<pre class=\"lang:default decode:true \">select * from  only person;\r\nselect * from  only hashpartition_0;\r\nselect * from  only hashpartition_1;\r\nselect * from  only hashpartition_2;\r\nselect * from  only hashpartition_3;\r\nselect * from  only hashpartition_4;<\/pre>\n<p>If you select maint table without only, you can see all the rows;<\/p>\n<pre class=\"lang:default decode:true\">select * from person;<\/pre>\n<p>You can see the distribution with the below query;<\/p>\n<pre class=\"lang:default decode:true\">SELECT tableoid::regclass AS source, count(*) FROM person GROUP BY source;<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-14481 aligncenter\" src=\"https:\/\/dbtut.com\/wp-content\/uploads\/2019\/12\/Ads\u0131z-33.png\" alt=\"\" width=\"578\" height=\"146\" \/><\/p>\n<h2>Sub-Partitioning in PostgreSQL<\/h2>\n<p>With Sub Partition, we can divide the partitions of the tables into sub-partitions. For example, suppose you have a partitioned table by years. It means a partition for each year. But you may also want to make partitions by months.<\/p>\n<h4>PostgreSQL Sub Partition Example<\/h4>\n<p>In this example, we will use the same table structure as the Range Partition Example.<\/p>\n<p><strong>Note:<\/strong> Do not forget sales table we have created for previous example.<\/p>\n<pre class=\"lang:default decode:true \">CREATE TABLE sales (\r\n id serial,\r\n sales_count int,\r\n sales_date date not null\r\n) PARTITION BY RANGE (sales_date);<\/pre>\n<p>Create partition for 2018-2019-2020.<\/p>\n<pre class=\"lang:default decode:true \">CREATE TABLE sales_2018 PARTITION OF sales\r\nFOR VALUES FROM ('2018-01-01') TO ('2019-01-01');\r\n \r\nCREATE TABLE sales_2019 PARTITION OF sales\r\nFOR VALUES FROM ('2019-01-01') TO ('2020-01-01');\r\n \r\nCREATE TABLE sales_2020 PARTITION OF sales\r\nFOR VALUES FROM ('2020-01-01') TO ('2021-01-01');<\/pre>\n<p>Insert below records to table.<\/p>\n<pre class=\"lang:default decode:true\">INSERT INTO sales (sales_count, sales_date) VALUES (50 , '2018-04-12');\r\nINSERT INTO sales (sales_count, sales_date) VALUES (80 , '2019-12-14');\r\nINSERT INTO sales (sales_count, sales_date) VALUES (70 , '2020-01-01');\r\nINSERT INTO sales (sales_count, sales_date) VALUES (75 , '2020-12-31');<\/pre>\n<h4>Get Row Count in Each Partition<\/h4>\n<pre class=\"lang:default decode:true\">SELECT tableoid::regclass AS source, count(*) FROM sales GROUP BY source;<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-14493 aligncenter\" src=\"https:\/\/dbtut.com\/wp-content\/uploads\/2019\/12\/Ads\u0131z-34.png\" alt=\"\" width=\"572\" height=\"145\" \/><\/p>\n<p>Suppose that your needs has changed and you need also sub partitions for new year. To perform this we will create a partition for sales_2021, and subpartitions for each month in 2021.<\/p>\n<pre class=\"lang:default decode:true\">create table sales_2021 partition of sales\r\nfor values from ('2021-01-01') to ('2022-01-01') partition by range(sales_date);<\/pre>\n<pre class=\"lang:default decode:true\">create table sales_2021_01 partition of sales_2021\r\nfor values from ('2021-01-01') to ('2021-02-01');\r\ncreate table sales_2021_02 partition of sales_2021\r\nfor values from ('2021-02-01') to ('2021-03-01');\r\ncreate table sales_2021_03 partition of sales_2021\r\nfor values from ('2021-03-01') to ('2021-04-01');\r\ncreate table sales_2021_04 partition of sales_2021\r\nfor values from ('2021-04-01') to ('2021-05-01');\r\ncreate table sales_2021_05 partition of sales_2021\r\nfor values from ('2021-05-01') to ('2021-06-01');\r\ncreate table sales_2021_06 partition of sales_2021\r\nfor values from ('2021-06-01') to ('2021-07-01');\r\ncreate table sales_2021_07 partition of sales_2021\r\nfor values from ('2021-07-01') to ('2021-08-01');\r\ncreate table sales_2021_08 partition of sales_2021\r\nfor values from ('2021-08-01') to ('2021-09-01');\r\ncreate table sales_2021_09 partition of sales_2021\r\nfor values from ('2021-09-01') to ('2021-10-01');\r\ncreate table sales_2021_10 partition of sales_2021\r\nfor values from ('2021-10-01') to ('2021-11-01');\r\ncreate table sales_2021_11 partition of sales_2021\r\nfor values from ('2021-11-01') to ('2021-12-01');\r\ncreate table sales_2021_12 partition of sales_2021\r\nfor values from ('2021-12-01') to ('2022-01-01');<\/pre>\n<p>The last partition structure of our table is as follows.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-14509 aligncenter\" src=\"https:\/\/dbtut.com\/wp-content\/uploads\/2019\/12\/Ads\u0131z-36.png\" alt=\"\" width=\"833\" height=\"210\" \/><\/p>\n<p>if you want to see the sub partitions you should execute the <code>\\d+ sales_2021<\/code> command.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-14512 aligncenter\" src=\"https:\/\/dbtut.com\/wp-content\/uploads\/2019\/12\/Ads\u0131z-37.png\" alt=\"\" width=\"881\" height=\"372\" \/><\/p>\n<div class=\"pvc_clear\"><\/div>\n<p id=\"pvc_stats_14429\" class=\"pvc_stats all  \" data-element-id=\"14429\" style=\"\"><i class=\"pvc-stats-icon medium\" aria-hidden=\"true\"><svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"far\" data-icon=\"chart-bar\" role=\"img\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"svg-inline--fa fa-chart-bar fa-w-16 fa-2x\"><path fill=\"currentColor\" d=\"M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z\" class=\"\"><\/path><\/svg><\/i> <img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"16\" alt=\"Loading\" src=\"https:\/\/dbtut.com\/wp-content\/plugins\/page-views-count\/ajax-loader-2x.gif\" border=0 \/><\/p>\n<div class=\"pvc_clear\"><\/div>\n","protected":false},"excerpt":{"rendered":"<p>This article contains information about table partitioning in PostgreSQL. We will look at the answers for the questions; What is partition in PostgreSQL What are the advantages of Table Partitioning in PostgreSQL PostgreSQL Partition Types What is Partition in PostgreSQL? We will be discussing the table partitioning in PostgreSQL 11.2. The partitioning method used before &hellip;<\/p>\n<div class=\"pvc_clear\"><\/div>\n<p id=\"pvc_stats_14429\" class=\"pvc_stats all  \" data-element-id=\"14429\" style=\"\"><i class=\"pvc-stats-icon medium\" aria-hidden=\"true\"><svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"far\" data-icon=\"chart-bar\" role=\"img\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"svg-inline--fa fa-chart-bar fa-w-16 fa-2x\"><path fill=\"currentColor\" d=\"M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z\" class=\"\"><\/path><\/svg><\/i> <img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"16\" alt=\"Loading\" src=\"https:\/\/dbtut.com\/wp-content\/plugins\/page-views-count\/ajax-loader-2x.gif\" border=0 \/><\/p>\n<div class=\"pvc_clear\"><\/div>\n","protected":false},"author":483,"featured_media":14430,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[5],"tags":[7183,7161,7184,7191,7195,7189,7190,7196,7197,7181,7158,7175,7198,7182,7159,8091,8092,7172,7163,7173,7167,7171,7180,7176,7166,7165,7162,7170,7168,7169,7178,7188,7164,7179,7177,7193,7194,7192,7187,7185,8089,8090,7160,7174],"class_list":["post-14429","post","type-post","status-publish","format-standard","has-post-thumbnail","","category-postgres","tag-check-partitions-in-postgresql","tag-does-postgresql-support-partitioning","tag-error-every-hash-partition-modulus-must-be-a-factor-of-the-next-larger-modulus","tag-find-partitions-postgresql","tag-find-row-count-of-all-partitions-postgresql","tag-get-row-count-in-partitions","tag-get-row-count-in-partitions-postgresql","tag-how-to-get-the-number-of-records-per-partition","tag-how-to-get-the-number-of-records-per-partition-postgresql","tag-list-partition-example","tag-list-partition-in-postgresql","tag-list-partitioning-in-postgresql","tag-partition-details-and-row-counts-postgresql","tag-partition-types","tag-partition-types-in-postgresql","tag-partitioning-in-postgresql-11","tag-partitioning-in-postgresql-12","tag-postgres-11-partitioning","tag-postgres-partitioning-types","tag-postgres-table-partitioning","tag-postgresql-11-partitioning","tag-postgresql-create-partition","tag-postgresql-list-partition-example","tag-postgresql-list-partitioning","tag-postgresql-partition","tag-postgresql-partition-by-date","tag-postgresql-partition-types","tag-postgresql-partitioning-11","tag-postgresql-partitioning-example","tag-postgresql-partitioning-tables","tag-postgresql-range-partition-example","tag-postgresql-sub-partition-example","tag-postgresql-table-partitioning-example","tag-range-partition-example","tag-range-partition-in-postgresql","tag-row-count-in-a-particular-partition","tag-row-count-in-a-particular-partition-postgresql","tag-row-count-of-each-partition-postgresql","tag-sub-partition-in-postgresql","tag-sub-partitioning-in-postgresql","tag-table-partitioning-in-postgresql-11","tag-table-partitioning-in-postgresql-12","tag-what-is-partition-in-postgresql","tag-what-is-table-partitioning-in-postgresql"],"aioseo_notices":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Table Partitioning in PostgreSQL 11.2 - Database Tutorials<\/title>\n<meta name=\"description\" content=\"This article contains information about table partitioning in PostgreSQL. What is partition in PostgreSQL, PostgreSQL Partition Types\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/dbtut.com\/index.php\/2019\/12\/30\/table-partitioning-in-postgresql-11-2\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Table Partitioning in PostgreSQL 11.2 - Database Tutorials\" \/>\n<meta property=\"og:description\" content=\"This article contains information about table partitioning in PostgreSQL. What is partition in PostgreSQL, PostgreSQL Partition Types\" \/>\n<meta property=\"og:url\" content=\"https:\/\/dbtut.com\/index.php\/2019\/12\/30\/table-partitioning-in-postgresql-11-2\/\" \/>\n<meta property=\"og:site_name\" content=\"Database Tutorials\" \/>\n<meta property=\"article:published_time\" content=\"2019-12-30T13:52:18+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-02-09T10:23:50+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/dbtut.com\/wp-content\/uploads\/2019\/12\/Ads\u0131z-24.png\" \/>\n\t<meta property=\"og:image:width\" content=\"536\" \/>\n\t<meta property=\"og:image:height\" content=\"307\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Yusuf KAHVEC\u0130\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Yusuf KAHVEC\u0130\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/dbtut.com\/index.php\/2019\/12\/30\/table-partitioning-in-postgresql-11-2\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/dbtut.com\/index.php\/2019\/12\/30\/table-partitioning-in-postgresql-11-2\/\"},\"author\":{\"name\":\"Yusuf KAHVEC\u0130\",\"@id\":\"https:\/\/dbtut.com\/#\/schema\/person\/695ad69b2bd896864842ba8772930150\"},\"headline\":\"Table Partitioning in PostgreSQL 11.2\",\"datePublished\":\"2019-12-30T13:52:18+00:00\",\"dateModified\":\"2021-02-09T10:23:50+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/dbtut.com\/index.php\/2019\/12\/30\/table-partitioning-in-postgresql-11-2\/\"},\"wordCount\":1020,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\/\/dbtut.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/dbtut.com\/index.php\/2019\/12\/30\/table-partitioning-in-postgresql-11-2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/dbtut.com\/wp-content\/uploads\/2019\/12\/Ads\u0131z-24.png\",\"keywords\":[\"Check Partitions in PostgreSQL\",\"Does PostgreSQL support partitioning?\",\"ERROR: every hash partition modulus must be a factor of the next larger modulus\",\"find partitions postgresql\",\"Find row count of all partitions postgresql\",\"Get Row Count in Partitions\",\"Get Row Count in Partitions postgresql\",\"how to get the number of records per partition\",\"how to get the number of records per partition postgresql\",\"List Partition Example\",\"LIST PARTITION in PostgreSQL\",\"list partitioning in postgresql\",\"Partition Details and Row Counts postgresql\",\"Partition Types\",\"Partition Types in PostgreSQL\",\"Partitioning in PostgreSQL 11\",\"Partitioning in PostgreSQL 12\",\"Postgres 11 partitioning\",\"postgres partitioning types\",\"Postgres Table Partitioning\",\"postgresql 11 partitioning\",\"postgresql create partition\",\"PostgreSQL List Partition Example\",\"postgresql list partitioning\",\"postgresql partition\",\"postgresql partition by date\",\"PostgreSQL partition types\",\"postgresql partitioning 11\",\"postgresql partitioning example\",\"postgresql partitioning tables\",\"PostgreSQL Range Partition Example\",\"PostgreSQL Sub Partition Example\",\"postgresql table partitioning example\",\"Range Partition Example\",\"RANGE PARTITION in PostgreSQL\",\"Row Count in a particular Partition\",\"Row Count in a particular Partition postgresql\",\"row count of each partition postgresql\",\"Sub Partition in PostgreSQL\",\"Sub-Partitioning in PostgreSQL\",\"Table Partitioning in PostgreSQL 11\",\"Table Partitioning in PostgreSQL 12\",\"What is partition in PostgreSQL?\",\"What is table partitioning in PostgreSQL?\"],\"articleSection\":[\"PostgreSQL\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/dbtut.com\/index.php\/2019\/12\/30\/table-partitioning-in-postgresql-11-2\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/dbtut.com\/index.php\/2019\/12\/30\/table-partitioning-in-postgresql-11-2\/\",\"url\":\"https:\/\/dbtut.com\/index.php\/2019\/12\/30\/table-partitioning-in-postgresql-11-2\/\",\"name\":\"Table Partitioning in PostgreSQL 11.2 - Database Tutorials\",\"isPartOf\":{\"@id\":\"https:\/\/dbtut.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/dbtut.com\/index.php\/2019\/12\/30\/table-partitioning-in-postgresql-11-2\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/dbtut.com\/index.php\/2019\/12\/30\/table-partitioning-in-postgresql-11-2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/dbtut.com\/wp-content\/uploads\/2019\/12\/Ads\u0131z-24.png\",\"datePublished\":\"2019-12-30T13:52:18+00:00\",\"dateModified\":\"2021-02-09T10:23:50+00:00\",\"description\":\"This article contains information about table partitioning in PostgreSQL. What is partition in PostgreSQL, PostgreSQL Partition Types\",\"breadcrumb\":{\"@id\":\"https:\/\/dbtut.com\/index.php\/2019\/12\/30\/table-partitioning-in-postgresql-11-2\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/dbtut.com\/index.php\/2019\/12\/30\/table-partitioning-in-postgresql-11-2\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/dbtut.com\/index.php\/2019\/12\/30\/table-partitioning-in-postgresql-11-2\/#primaryimage\",\"url\":\"https:\/\/dbtut.com\/wp-content\/uploads\/2019\/12\/Ads\u0131z-24.png\",\"contentUrl\":\"https:\/\/dbtut.com\/wp-content\/uploads\/2019\/12\/Ads\u0131z-24.png\",\"width\":536,\"height\":307},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/dbtut.com\/index.php\/2019\/12\/30\/table-partitioning-in-postgresql-11-2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/dbtut.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Table Partitioning in PostgreSQL 11.2\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/dbtut.com\/#website\",\"url\":\"https:\/\/dbtut.com\/\",\"name\":\"Database Tutorials\",\"description\":\"MSSQL, Oracle, PostgreSQL, MySQL, MariaDB, DB2, Sybase, Teradata, Big Data, NOSQL, MongoDB, Couchbase, Cassandra, Windows, Linux\",\"publisher\":{\"@id\":\"https:\/\/dbtut.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/dbtut.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/dbtut.com\/#organization\",\"name\":\"dbtut\",\"url\":\"https:\/\/dbtut.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/dbtut.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/dbtut.com\/wp-content\/uploads\/2021\/02\/dbtutlogo.jpg\",\"contentUrl\":\"https:\/\/dbtut.com\/wp-content\/uploads\/2021\/02\/dbtutlogo.jpg\",\"width\":223,\"height\":36,\"caption\":\"dbtut\"},\"image\":{\"@id\":\"https:\/\/dbtut.com\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/dbtut.com\/#\/schema\/person\/695ad69b2bd896864842ba8772930150\",\"name\":\"Yusuf KAHVEC\u0130\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/dbtut.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/b7b4650ddb695869b13831d79f25c19ee915dc2151a7c8fcdf01538c295eb032?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/b7b4650ddb695869b13831d79f25c19ee915dc2151a7c8fcdf01538c295eb032?s=96&d=mm&r=g\",\"caption\":\"Yusuf KAHVEC\u0130\"},\"url\":\"https:\/\/dbtut.com\/index.php\/author\/yusufkahveci\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Table Partitioning in PostgreSQL 11.2 - Database Tutorials","description":"This article contains information about table partitioning in PostgreSQL. What is partition in PostgreSQL, PostgreSQL Partition Types","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:\/\/dbtut.com\/index.php\/2019\/12\/30\/table-partitioning-in-postgresql-11-2\/","og_locale":"en_US","og_type":"article","og_title":"Table Partitioning in PostgreSQL 11.2 - Database Tutorials","og_description":"This article contains information about table partitioning in PostgreSQL. What is partition in PostgreSQL, PostgreSQL Partition Types","og_url":"https:\/\/dbtut.com\/index.php\/2019\/12\/30\/table-partitioning-in-postgresql-11-2\/","og_site_name":"Database Tutorials","article_published_time":"2019-12-30T13:52:18+00:00","article_modified_time":"2021-02-09T10:23:50+00:00","og_image":[{"width":536,"height":307,"url":"https:\/\/dbtut.com\/wp-content\/uploads\/2019\/12\/Ads\u0131z-24.png","type":"image\/png"}],"author":"Yusuf KAHVEC\u0130","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Yusuf KAHVEC\u0130","Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/dbtut.com\/index.php\/2019\/12\/30\/table-partitioning-in-postgresql-11-2\/#article","isPartOf":{"@id":"https:\/\/dbtut.com\/index.php\/2019\/12\/30\/table-partitioning-in-postgresql-11-2\/"},"author":{"name":"Yusuf KAHVEC\u0130","@id":"https:\/\/dbtut.com\/#\/schema\/person\/695ad69b2bd896864842ba8772930150"},"headline":"Table Partitioning in PostgreSQL 11.2","datePublished":"2019-12-30T13:52:18+00:00","dateModified":"2021-02-09T10:23:50+00:00","mainEntityOfPage":{"@id":"https:\/\/dbtut.com\/index.php\/2019\/12\/30\/table-partitioning-in-postgresql-11-2\/"},"wordCount":1020,"commentCount":1,"publisher":{"@id":"https:\/\/dbtut.com\/#organization"},"image":{"@id":"https:\/\/dbtut.com\/index.php\/2019\/12\/30\/table-partitioning-in-postgresql-11-2\/#primaryimage"},"thumbnailUrl":"https:\/\/dbtut.com\/wp-content\/uploads\/2019\/12\/Ads\u0131z-24.png","keywords":["Check Partitions in PostgreSQL","Does PostgreSQL support partitioning?","ERROR: every hash partition modulus must be a factor of the next larger modulus","find partitions postgresql","Find row count of all partitions postgresql","Get Row Count in Partitions","Get Row Count in Partitions postgresql","how to get the number of records per partition","how to get the number of records per partition postgresql","List Partition Example","LIST PARTITION in PostgreSQL","list partitioning in postgresql","Partition Details and Row Counts postgresql","Partition Types","Partition Types in PostgreSQL","Partitioning in PostgreSQL 11","Partitioning in PostgreSQL 12","Postgres 11 partitioning","postgres partitioning types","Postgres Table Partitioning","postgresql 11 partitioning","postgresql create partition","PostgreSQL List Partition Example","postgresql list partitioning","postgresql partition","postgresql partition by date","PostgreSQL partition types","postgresql partitioning 11","postgresql partitioning example","postgresql partitioning tables","PostgreSQL Range Partition Example","PostgreSQL Sub Partition Example","postgresql table partitioning example","Range Partition Example","RANGE PARTITION in PostgreSQL","Row Count in a particular Partition","Row Count in a particular Partition postgresql","row count of each partition postgresql","Sub Partition in PostgreSQL","Sub-Partitioning in PostgreSQL","Table Partitioning in PostgreSQL 11","Table Partitioning in PostgreSQL 12","What is partition in PostgreSQL?","What is table partitioning in PostgreSQL?"],"articleSection":["PostgreSQL"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/dbtut.com\/index.php\/2019\/12\/30\/table-partitioning-in-postgresql-11-2\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/dbtut.com\/index.php\/2019\/12\/30\/table-partitioning-in-postgresql-11-2\/","url":"https:\/\/dbtut.com\/index.php\/2019\/12\/30\/table-partitioning-in-postgresql-11-2\/","name":"Table Partitioning in PostgreSQL 11.2 - Database Tutorials","isPartOf":{"@id":"https:\/\/dbtut.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/dbtut.com\/index.php\/2019\/12\/30\/table-partitioning-in-postgresql-11-2\/#primaryimage"},"image":{"@id":"https:\/\/dbtut.com\/index.php\/2019\/12\/30\/table-partitioning-in-postgresql-11-2\/#primaryimage"},"thumbnailUrl":"https:\/\/dbtut.com\/wp-content\/uploads\/2019\/12\/Ads\u0131z-24.png","datePublished":"2019-12-30T13:52:18+00:00","dateModified":"2021-02-09T10:23:50+00:00","description":"This article contains information about table partitioning in PostgreSQL. What is partition in PostgreSQL, PostgreSQL Partition Types","breadcrumb":{"@id":"https:\/\/dbtut.com\/index.php\/2019\/12\/30\/table-partitioning-in-postgresql-11-2\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/dbtut.com\/index.php\/2019\/12\/30\/table-partitioning-in-postgresql-11-2\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/dbtut.com\/index.php\/2019\/12\/30\/table-partitioning-in-postgresql-11-2\/#primaryimage","url":"https:\/\/dbtut.com\/wp-content\/uploads\/2019\/12\/Ads\u0131z-24.png","contentUrl":"https:\/\/dbtut.com\/wp-content\/uploads\/2019\/12\/Ads\u0131z-24.png","width":536,"height":307},{"@type":"BreadcrumbList","@id":"https:\/\/dbtut.com\/index.php\/2019\/12\/30\/table-partitioning-in-postgresql-11-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/dbtut.com\/"},{"@type":"ListItem","position":2,"name":"Table Partitioning in PostgreSQL 11.2"}]},{"@type":"WebSite","@id":"https:\/\/dbtut.com\/#website","url":"https:\/\/dbtut.com\/","name":"Database Tutorials","description":"MSSQL, Oracle, PostgreSQL, MySQL, MariaDB, DB2, Sybase, Teradata, Big Data, NOSQL, MongoDB, Couchbase, Cassandra, Windows, Linux","publisher":{"@id":"https:\/\/dbtut.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/dbtut.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/dbtut.com\/#organization","name":"dbtut","url":"https:\/\/dbtut.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/dbtut.com\/#\/schema\/logo\/image\/","url":"https:\/\/dbtut.com\/wp-content\/uploads\/2021\/02\/dbtutlogo.jpg","contentUrl":"https:\/\/dbtut.com\/wp-content\/uploads\/2021\/02\/dbtutlogo.jpg","width":223,"height":36,"caption":"dbtut"},"image":{"@id":"https:\/\/dbtut.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/dbtut.com\/#\/schema\/person\/695ad69b2bd896864842ba8772930150","name":"Yusuf KAHVEC\u0130","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/dbtut.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/b7b4650ddb695869b13831d79f25c19ee915dc2151a7c8fcdf01538c295eb032?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b7b4650ddb695869b13831d79f25c19ee915dc2151a7c8fcdf01538c295eb032?s=96&d=mm&r=g","caption":"Yusuf KAHVEC\u0130"},"url":"https:\/\/dbtut.com\/index.php\/author\/yusufkahveci\/"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/dbtut.com\/index.php\/wp-json\/wp\/v2\/posts\/14429","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dbtut.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dbtut.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dbtut.com\/index.php\/wp-json\/wp\/v2\/users\/483"}],"replies":[{"embeddable":true,"href":"https:\/\/dbtut.com\/index.php\/wp-json\/wp\/v2\/comments?post=14429"}],"version-history":[{"count":0,"href":"https:\/\/dbtut.com\/index.php\/wp-json\/wp\/v2\/posts\/14429\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dbtut.com\/index.php\/wp-json\/wp\/v2\/media\/14430"}],"wp:attachment":[{"href":"https:\/\/dbtut.com\/index.php\/wp-json\/wp\/v2\/media?parent=14429"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dbtut.com\/index.php\/wp-json\/wp\/v2\/categories?post=14429"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dbtut.com\/index.php\/wp-json\/wp\/v2\/tags?post=14429"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}