PG Partition Manager 分區管理器

PG Partition Manager 分區管理器

簡介

Pg partman 是創建和管理基於時間和基於序列的表分區集的擴展

下載

git clone https://github.com/pgpartman/pg_partman.git

編譯安裝

chown -R postgres.postgres pg_partman-master
su - postgres
[postgres@mysql ~]$ cd /tools/pg_partman-master
[postgres@mysql pg_partman-master]$ make NO_BGW=1 install
cat sql/types/types.sql sql/tables/tables.sql sql/functions/apply_cluster.sql sql/functions/apply_constraints.sql sql/functions/apply_foreign_keys.sql sql/functions/apply_privileges.sql sql/functions/apply_publications.sql sql/functions/autovacuum_off.sql sql/functions/autovacuum_reset.sql sql/functions/check_control_type.sql sql/functions/check_default.sql sql/functions/check_name_length.sql sql/functions/check_subpart_sameconfig.sql sql/functions/check_subpartition_limits.sql sql/functions/create_function_id.sql sql/functions/create_function_time.sql sql/functions/create_parent.sql sql/functions/create_partition_id.sql sql/functions/create_partition_time.sql sql/functions/create_sub_parent.sql sql/functions/create_trigger.sql sql/functions/drop_constraints.sql sql/functions/drop_partition_column.sql sql/functions/drop_partition_id.sql sql/functions/drop_partition_time.sql sql/functions/dump_partition_table_definition.sql sql/functions/inherit_template_properties.sql sql/functions/partition_data_id.sql sql/functions/partition_data_time.sql sql/functions/partition_gap_fill.sql sql/functions/reapply_privileges.sql sql/functions/run_maintenance.sql sql/functions/show_partition_info.sql sql/functions/show_partition_name.sql sql/functions/show_partitions.sql sql/functions/stop_sub_partition.sql sql/functions/undo_partition.sql sql/procedures/partition_data_proc.sql sql/procedures/reapply_constraints_proc.sql sql/procedures/run_maintenance_proc.sql sql/procedures/undo_partition_proc.sql > sql/pg_partman--4.4.0.sql
/bin/mkdir -p '/home/postgres/pg13/share/extension'
/bin/mkdir -p '/home/postgres/pg13/share/extension'
/bin/mkdir -p '/home/postgres/pg13/share/doc/extension'
/bin/mkdir -p '/home/postgres/pg13/bin'
/usr/bin/install -c -m 644 .//pg_partman.control '/home/postgres/pg13/share/extension/'
/usr/bin/install -c -m 644 .//updates/pg_partman--0.1.0--0.1.1.sql .//updates/pg_partman--0.1.1--0.1.2.sql .//updates/pg_partman--0.1.2--0.2.0.sql .//updates/pg_partman--0.2.0--0.3.0.sql .//updates/pg_partman--0.3.0--0.3.1.sql .//updates/pg_partman--0.3.1--0.3.2.sql .//updates/pg_partman--0.3.2--0.4.0.sql .//updates/pg_partman--0.4.0--0.4.1.sql .//updates/pg_partman--0.4.1--0.4.2.sql .//updates/pg_partman--0.4.2--1.0.0.sql .//updates/pg_partman--1.0.0--1.1.0.sql .//updates/pg_partman--1.1.0--1.2.0.sql .//updates/pg_partman--1.2.0--1.3.0.sql .//updates/pg_partman--1.3.0--1.4.0.sql .//updates/pg_partman--1.4.0--1.4.1.sql .//updates/pg_partman--1.4.1--1.4.2.sql .//updates/pg_partman--1.4.2--1.4.3.sql .//updates/pg_partman--1.4.3--1.4.4.sql .//updates/pg_partman--1.4.4--1.4.5.sql .//updates/pg_partman--1.4.5--1.5.0.sql .//updates/pg_partman--1.5.0--1.5.1.sql .//updates/pg_partman--1.5.1--1.6.0.sql .//updates/pg_partman--1.6.0--1.6.1.sql .//updates/pg_partman--1.6.1--1.7.0.sql .//updates/pg_partman--1.7.0--1.7.1.sql .//updates/pg_partman--1.7.1--1.7.2.sql .//updates/pg_partman--1.7.2--1.8.0.sql .//updates/pg_partman--1.8.0--1.8.1.sql .//updates/pg_partman--1.8.1--1.8.2.sql .//updates/pg_partman--1.8.2--1.8.3.sql .//updates/pg_partman--1.8.3--1.8.4.sql .//updates/pg_partman--1.8.4--1.8.5.sql .//updates/pg_partman--1.8.5--1.8.6.sql .//updates/pg_partman--1.8.6--1.8.7.sql .//updates/pg_partman--1.8.7--1.8.8.sql .//updates/pg_partman--1.8.7--2.0.0.sql .//updates/pg_partman--1.8.8--2.0.0.sql .//updates/pg_partman--2.0.0--2.1.0.sql .//updates/pg_partman--2.1.0--2.2.0.sql .//updates/pg_partman--2.2.0--2.2.1.sql .//updates/pg_partman--2.2.1--2.2.2.sql .//updates/pg_partman--2.2.2--2.2.3.sql .//updates/pg_partman--2.2.3--2.3.0.sql .//updates/pg_partman--2.3.0--2.3.1.sql .//updates/pg_partman--2.3.1--2.3.2.sql .//updates/pg_partman--2.3.2--2.3.3.sql .//updates/pg_partman--2.3.3--2.3.4.sql .//updates/pg_partman--2.3.4--2.4.0.sql .//updates/pg_partman--2.4.0--2.4.1.sql .//updates/pg_partman--2.4.1--2.5.0.sql .//updates/pg_partman--2.5.0--2.5.1.sql .//updates/pg_partman--2.5.1--2.6.0.sql .//updates/pg_partman--2.6.0--2.6.1.sql .//updates/pg_partman--2.6.1--2.6.2.sql .//updates/pg_partman--2.6.2--2.6.3.sql .//updates/pg_partman--2.6.3--2.6.4.sql .//updates/pg_partman--2.6.4--3.0.0.sql .//updates/pg_partman--3.0.0--3.0.1.sql .//updates/pg_partman--3.0.1--3.0.2.sql .//updates/pg_partman--3.0.2--3.1.0.sql .//updates/pg_partman--3.1.0--3.1.1.sql .//updates/pg_partman--3.1.1--3.1.2.sql .//updates/pg_partman--3.1.2--3.1.3.sql .//updates/pg_partman--3.1.3--3.2.0.sql .//updates/pg_partman--3.2.0--3.2.1.sql .//updates/pg_partman--3.2.1--4.0.0.sql .//updates/pg_partman--4.0.0--4.1.0.sql .//updates/pg_partman--4.1.0--4.2.0.sql .//updates/pg_partman--4.2.0--4.2.1.sql .//updates/pg_partman--4.2.1--4.2.2.sql .//updates/pg_partman--4.2.2--4.3.0.sql .//updates/pg_partman--4.3.0--4.3.1.sql .//updates/pg_partman--4.3.1--4.4.0.sql .//sql/pg_partman--4.4.0.sql  '/home/postgres/pg13/share/extension/'
/usr/bin/install -c -m 644 .//doc/migrate_to_native.md .//doc/migration_to_partman.md .//doc/pg_partman_howto.md .//doc/pg_partman.md '/home/postgres/pg13/share/doc/extension/'
/usr/bin/install -c -m 755 .//bin/common/*.py '/home/postgres/pg13/bin/'
[postgres@mysql pg_partman-master]$ 

查看生成的文件

[postgres@mysql pg_partman-master]$ ll ./bin/common/*py
-rwxr-xr-x 1 postgres postgres 4.3K May 12 02:25 ./bin/common/check_unique_constraint.py
-rwxr-xr-x 1 postgres postgres 5.7K May 12 02:25 ./bin/common/dump_partition.py
-rwxr-xr-x 1 postgres postgres  17K May 12 02:25 ./bin/common/reapply_indexes.py
-rwxr-xr-x 1 postgres postgres  12K May 12 02:25 ./bin/common/vacuum_maintenance.py
[postgres@mysql pg_partman-master]$ ll /home/postgres/pg13/share/extension/pg_par*
-rw-r--r-- 1 postgres postgres 2.8K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--0.1.0--0.1.1.sql
-rw-r--r-- 1 postgres postgres  36K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--0.1.1--0.1.2.sql
-rw-r--r-- 1 postgres postgres  21K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--0.1.2--0.2.0.sql
-rw-r--r-- 1 postgres postgres  12K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--0.2.0--0.3.0.sql
-rw-r--r-- 1 postgres postgres  20K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--0.3.0--0.3.1.sql
-rw-r--r-- 1 postgres postgres 9.2K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--0.3.1--0.3.2.sql
-rw-r--r-- 1 postgres postgres  25K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--0.3.2--0.4.0.sql
-rw-r--r-- 1 postgres postgres  20K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--0.4.0--0.4.1.sql
-rw-r--r-- 1 postgres postgres  28K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--0.4.1--0.4.2.sql
-rw-r--r-- 1 postgres postgres  64K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--0.4.2--1.0.0.sql
-rw-r--r-- 1 postgres postgres  28K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--1.0.0--1.1.0.sql
-rw-r--r-- 1 postgres postgres  49K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--1.1.0--1.2.0.sql
-rw-r--r-- 1 postgres postgres  35K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--1.2.0--1.3.0.sql
-rw-r--r-- 1 postgres postgres  88K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--1.3.0--1.4.0.sql
-rw-r--r-- 1 postgres postgres  15K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--1.4.0--1.4.1.sql
-rw-r--r-- 1 postgres postgres 8.2K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--1.4.1--1.4.2.sql
-rw-r--r-- 1 postgres postgres  624 Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--1.4.2--1.4.3.sql
-rw-r--r-- 1 postgres postgres 8.4K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--1.4.3--1.4.4.sql
-rw-r--r-- 1 postgres postgres  598 Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--1.4.4--1.4.5.sql
-rw-r--r-- 1 postgres postgres  42K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--1.4.5--1.5.0.sql
-rw-r--r-- 1 postgres postgres 8.8K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--1.5.0--1.5.1.sql
-rw-r--r-- 1 postgres postgres 129K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--1.5.1--1.6.0.sql
-rw-r--r-- 1 postgres postgres  43K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--1.6.0--1.6.1.sql
-rw-r--r-- 1 postgres postgres  76K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--1.6.1--1.7.0.sql
-rw-r--r-- 1 postgres postgres  53K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--1.7.0--1.7.1.sql
-rw-r--r-- 1 postgres postgres  35K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--1.7.1--1.7.2.sql
-rw-r--r-- 1 postgres postgres 161K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--1.7.2--1.8.0.sql
-rw-r--r-- 1 postgres postgres  36K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--1.8.0--1.8.1.sql
-rw-r--r-- 1 postgres postgres  82K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--1.8.1--1.8.2.sql
-rw-r--r-- 1 postgres postgres  48K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--1.8.2--1.8.3.sql
-rw-r--r-- 1 postgres postgres 7.4K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--1.8.3--1.8.4.sql
-rw-r--r-- 1 postgres postgres  43K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--1.8.4--1.8.5.sql
-rw-r--r-- 1 postgres postgres  16K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--1.8.5--1.8.6.sql
-rw-r--r-- 1 postgres postgres 2.1K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--1.8.6--1.8.7.sql
-rw-r--r-- 1 postgres postgres  20K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--1.8.7--1.8.8.sql
-rw-r--r-- 1 postgres postgres 193K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--1.8.7--2.0.0.sql
-rw-r--r-- 1 postgres postgres 186K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--1.8.8--2.0.0.sql
-rw-r--r-- 1 postgres postgres 205K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--2.0.0--2.1.0.sql
-rw-r--r-- 1 postgres postgres 152K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--2.1.0--2.2.0.sql
-rw-r--r-- 1 postgres postgres  21K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--2.2.0--2.2.1.sql
-rw-r--r-- 1 postgres postgres  398 Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--2.2.1--2.2.2.sql
-rw-r--r-- 1 postgres postgres  83K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--2.2.2--2.2.3.sql
-rw-r--r-- 1 postgres postgres 219K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--2.2.3--2.3.0.sql
-rw-r--r-- 1 postgres postgres  440 Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--2.3.0--2.3.1.sql
-rw-r--r-- 1 postgres postgres 129K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--2.3.1--2.3.2.sql
-rw-r--r-- 1 postgres postgres 221K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--2.3.2--2.3.3.sql
-rw-r--r-- 1 postgres postgres 213K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--2.3.3--2.3.4.sql
-rw-r--r-- 1 postgres postgres 107K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--2.3.4--2.4.0.sql
-rw-r--r-- 1 postgres postgres 6.3K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--2.4.0--2.4.1.sql
-rw-r--r-- 1 postgres postgres  65K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--2.4.1--2.5.0.sql
-rw-r--r-- 1 postgres postgres  30K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--2.5.0--2.5.1.sql
-rw-r--r-- 1 postgres postgres  89K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--2.5.1--2.6.0.sql
-rw-r--r-- 1 postgres postgres  85K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--2.6.0--2.6.1.sql
-rw-r--r-- 1 postgres postgres  72K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--2.6.1--2.6.2.sql
-rw-r--r-- 1 postgres postgres 109K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--2.6.2--2.6.3.sql
-rw-r--r-- 1 postgres postgres 2.7K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--2.6.3--2.6.4.sql
-rw-r--r-- 1 postgres postgres 283K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--2.6.4--3.0.0.sql
-rw-r--r-- 1 postgres postgres 1.8K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--3.0.0--3.0.1.sql
-rw-r--r-- 1 postgres postgres  81K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--3.0.1--3.0.2.sql
-rw-r--r-- 1 postgres postgres 146K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--3.0.2--3.1.0.sql
-rw-r--r-- 1 postgres postgres  39K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--3.1.0--3.1.1.sql
-rw-r--r-- 1 postgres postgres  833 Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--3.1.1--3.1.2.sql
-rw-r--r-- 1 postgres postgres  39K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--3.1.2--3.1.3.sql
-rw-r--r-- 1 postgres postgres  73K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--3.1.3--3.2.0.sql
-rw-r--r-- 1 postgres postgres 6.1K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--3.2.0--3.2.1.sql
-rw-r--r-- 1 postgres postgres 254K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--3.2.1--4.0.0.sql
-rw-r--r-- 1 postgres postgres 133K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--4.0.0--4.1.0.sql
-rw-r--r-- 1 postgres postgres 118K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--4.1.0--4.2.0.sql
-rw-r--r-- 1 postgres postgres  14K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--4.2.0--4.2.1.sql
-rw-r--r-- 1 postgres postgres 9.0K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--4.2.1--4.2.2.sql
-rw-r--r-- 1 postgres postgres 150K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--4.2.2--4.3.0.sql
-rw-r--r-- 1 postgres postgres  93K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--4.3.0--4.3.1.sql
-rw-r--r-- 1 postgres postgres 128K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--4.3.1--4.4.0.sql
-rw-r--r-- 1 postgres postgres 323K Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman--4.4.0.sql
-rw-r--r-- 1 postgres postgres  111 Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman.control


-rw-r--r-- 1 postgres postgres  111 Jun  7 16:05 /home/postgres/pg13/share/extension/pg_partman.control
[postgres@mysql pg_partman-master]$ ll /home/postgres/pg13/share/doc/extension/pg_par*
-rw-r--r-- 1 postgres postgres  52K Jun  7 16:05 /home/postgres/pg13/share/doc/extension/pg_partman_howto.md
-rw-r--r-- 1 postgres postgres 104K Jun  7 16:05 /home/postgres/pg13/share/doc/extension/pg_partman.md

使用

-- 查看插件是否存在
postgres=# select * from pg_available_extensions where name like 'pg_part%';
    name    | default_version | installed_version |                       comment                        
------------+-----------------+-------------------+------------------------------------------------------
 pg_partman | 4.4.0           | 4.4.0             | Extension to manage partitioned tables by time or ID
(1 row)


-- 創建擴展
create extension if not EXISTS pg_partman;

-- 創建測試表
drop table  if exits test
create table test(id int primary key , name varchar, create_time TIMESTAMP without time zone not null default clock_timestamp() );

-- 注意,要想使用pg_partman查看,需要注意父表分表字段必須有非空約束
 SELECT create_parent('public.test', 'create_time', 'partman', 'daily''{id}',20);
 
-- 查看分表,發現默認是創建9張表
 postgres=# \d+ test
                                                     Table "public.test"
   Column    |            Type             | Collation | Nullable |      Default      | Storage  | Stats target | Description 
-------------+-----------------------------+-----------+----------+-------------------+----------+--------------+-------------
 id          | integer                     |           | not null |                   | plain    |              | 
 name        | character varying           |           |          |                   | extended |              | 
 create_time | timestamp without time zone |           | not null | clock_timestamp() | plain    |              | 
Indexes:
    "test_pkey" PRIMARY KEY, btree (id)
Triggers:
    test_part_trig BEFORE INSERT ON test FOR EACH ROW EXECUTE FUNCTION test_part_trig_func()
Child tables: test_p2020_06_03,
              test_p2020_06_04,
              test_p2020_06_05,
              test_p2020_06_06,
              test_p2020_06_07,
              test_p2020_06_08,
              test_p2020_06_09,
              test_p2020_06_10,
              test_p2020_06_11
Access method: heap

研究函數 create_parent
create_parent(p_parent_table text, p_control text, p_type text, p_interval text, p_constraint_cols text[] DEFAULT NULL, p_premake int DEFAULT 4, p_automatic_maintenance text DEFAULT 'on', p_start_partition text DEFAULT NULL, p_inherit_fk boolean DEFAULT true, p_epoch text DEFAULT 'none', p_upsert text DEFAULT '', p_publications text[] DEFAULT NULL, p_trigger_return_null boolean DEFAULT true, p_template_table text DEFAULT NULL, p_jobmon boolean DEFAULT true, p_debug boolean DEFAULT false) RETURNS boolean

作用:

創建指定父表的若干子表集合,使用此函數的前提是父表已經存在;

說明:

  • 請將所有默認值、索引、約束、特權和所有權應用於父表,這樣它們將傳播到子表
  • 對於本地分區,必須已經聲明父表,並且傳遞給該函數的配置選項必須與該定義匹配
  • 此函數運行期間,對父表執行 ACCESS EXCLUSIVE 鎖。 運行這個函數時沒有移動任何數據,因此鎖定應該很簡短

參數解釋:

  • p_parent_table :需要創建分表的父表名稱,需要帶有模式限制(形如public.test)

  • p_control : 分區將基於的列。必須是基於時間或整數的列

  • p_type: 用於設置將要使用的分區類型, 下列值之一

    • native: 本地分區
      • 使用 PostgreSQL 10 + 中內置的本地分區方法
      • 對於 PG11 + ,強烈建議使用本機分區而不是基於觸發器的分區。 Pg10仍然缺乏本地分區的重要特性
    • partman:基於觸發器的分區
      • 使用 pg partman 的分區方法創建一個基於觸發器的分區集
      • 是基於時間還是基於序列取決於控件列的數據類型以及是否設置了 p_epoch 標誌
      • 最有效管理的分區的數量是由 part_config表中的優化觸發器配置值決定的(默認值爲4表示前4個分區和後4個分區的數據處理效果最好)
      • 如果給定的值對應的字表並不存在,則會將該行記錄插入到父表中保存
      • 子表的創建和觸發器函數通過run_maintenance函數保持最新
  • p_interval : 每個分區的時間間隔或整數範圍間隔,無論分區類型如何,值都必須以文本形式給出

    • 當使用 pg partman 的基於觸發器的劃分時,給出其中一個明確的值,將比使用任意時間間隔提供更好的性能。

    • 對於本機分區,任何間隔值都是有效的,並且具有相同的性能,總是優於基於觸發器的分區

    • 可取值如下:

      • yearly : 年度的
      • quarterly : 季度的
      • monthly : 月度的
      • weekly : 每週
      • daily : 每日
      • hourly :每小時
      • half-hour:每半小時
      • quarter-hour:每15分鐘
      • : 除了上面的值以外,對於 PostgreSQL 間隔類型有效的任何其他間隔。 請注意,如果不使用本機分區,將會嚴重影響性能。 不要輸入強制轉換參數值,只保留文本形式
      • :對於基於 ID 的分區,爲每個分區設置 ID 的整數值範圍。 以文本格式輸入此整數(“100”而不是100)。 必須大於或等於10
  • 實例

    • 基於 partman (觸發器方式) 創建分表

      * drop table if exists test;
        create table test(id int primary key , name varchar, create_time timestamp  without time zone  not null default clock_timestamp());
        postgres=# select create_parent('public.test', 'create_time', 'partman', 'daily');
         create_parent 
      
      ---------------
      
       t
      (1 row)
      
      postgres=# 
      postgres=# \d+ test
                                                           Table "public.test"
         Column    |            Type             | Collation | Nullable |      Default      | Storage  | Stats target | Description 
      -------------+-----------------------------+-----------+----------+-------------------+----------+--------------+-------------
       id          | integer                     |           | not null |                   | plain    |              | 
       name        | character varying           |           |          |                   | extended |              | 
       create_time | timestamp without time zone |           | not null | clock_timestamp() | plain    |              | 
      Indexes:
          "test_pkey" PRIMARY KEY, btree (id)
      Triggers:
          test_part_trig BEFORE INSERT ON test FOR EACH ROW EXECUTE FUNCTION test_part_trig_func()
      Child tables: test_p2020_06_03,
                    test_p2020_06_04,
                    test_p2020_06_05,
                    test_p2020_06_06,
                    test_p2020_06_07,
                    test_p2020_06_08,
                    test_p2020_06_09,
                    test_p2020_06_10,
                    test_p2020_06_11
      Access method: heap
      
    • 基於 native 創建分表

      * drop table if exists test2;
        create table test2(
        id int,
        name varchar, 
        create_time timestamp  without time zone  not null default clock_timestamp(),
        constraint pk_test2 primary key(id, create_time)
        ) partition by range(create_time);
      
      postgres=# select create_parent('public.test2', 'create_time', 'native', 'daily');
      
       create_parent 
      ---------------
      
       t
      (1 row)
      
      postgres=# \d+ test2
                                                     Partitioned table "public.test2"
         Column    |            Type             | Collation | Nullable |      Default      | Storage  | Stats target | Description 
      -------------+-----------------------------+-----------+----------+-------------------+----------+--------------+-------------
       id          | integer                     |           | not null |                   | plain    |              | 
       name        | character varying           |           |          |                   | extended |              | 
       create_time | timestamp without time zone |           | not null | clock_timestamp() | plain    |              | 
      Partition key: RANGE (create_time)
      Indexes:
          "pk_test2" PRIMARY KEY, btree (id, create_time)
      Partitions: test2_p2020_06_03 FOR VALUES FROM ('2020-06-03 00:00:00') TO ('2020-06-04 00:00:00'),
                  test2_p2020_06_04 FOR VALUES FROM ('2020-06-04 00:00:00') TO ('2020-06-05 00:00:00'),
                  test2_p2020_06_05 FOR VALUES FROM ('2020-06-05 00:00:00') TO ('2020-06-06 00:00:00'),
                  test2_p2020_06_06 FOR VALUES FROM ('2020-06-06 00:00:00') TO ('2020-06-07 00:00:00'),
                  test2_p2020_06_07 FOR VALUES FROM ('2020-06-07 00:00:00') TO ('2020-06-08 00:00:00'),
                  test2_p2020_06_08 FOR VALUES FROM ('2020-06-08 00:00:00') TO ('2020-06-09 00:00:00'),
                  test2_p2020_06_09 FOR VALUES FROM ('2020-06-09 00:00:00') TO ('2020-06-10 00:00:00'),
                  test2_p2020_06_10 FOR VALUES FROM ('2020-06-10 00:00:00') TO ('2020-06-11 00:00:00'),
                  test2_p2020_06_11 FOR VALUES FROM ('2020-06-11 00:00:00') TO ('2020-06-12 00:00:00'),
                  test2_default DEFAULT
      
      postgres=# 
    
    • 再來一個實例
      drop table if exists test3;
      delete from part_config where parent_table='public.test3';
      create table test3(
      	id int,
      	name varchar, 
      	create_time timestamp  without time zone  not null default clock_timestamp(),
      	constraint pk_test3 primary key(id, create_time)
      ) partition by range(create_time);
      
      select create_parent('public.test3' , 'create_time', 'native', 'daily',  NULL,20,  'on',(now()+interval '2 days')::text);
      
      結果如下所示:
      postgres=# \d+ test3
                                                     Partitioned table "public.test3"
         Column    |            Type             | Collation | Nullable |      Default      | Storage  | Stats target | Description 
      -------------+-----------------------------+-----------+----------+-------------------+----------+--------------+-------------
       id          | integer                     |           | not null |                   | plain    |              | 
       name        | character varying           |           |          |                   | extended |              | 
       create_time | timestamp without time zone |           | not null | clock_timestamp() | plain    |              | 
      Partition key: RANGE (create_time)
      Indexes:
          "pk_test3" PRIMARY KEY, btree (id, create_time)
      Partitions: test3_p2020_06_09 FOR VALUES FROM ('2020-06-09 00:00:00') TO ('2020-06-10 00:00:00'),
                  test3_p2020_06_10 FOR VALUES FROM ('2020-06-10 00:00:00') TO ('2020-06-11 00:00:00'),
                  test3_p2020_06_11 FOR VALUES FROM ('2020-06-11 00:00:00') TO ('2020-06-12 00:00:00'),
                  test3_p2020_06_12 FOR VALUES FROM ('2020-06-12 00:00:00') TO ('2020-06-13 00:00:00'),
                  test3_p2020_06_13 FOR VALUES FROM ('2020-06-13 00:00:00') TO ('2020-06-14 00:00:00'),
                  test3_p2020_06_14 FOR VALUES FROM ('2020-06-14 00:00:00') TO ('2020-06-15 00:00:00'),
                  test3_p2020_06_15 FOR VALUES FROM ('2020-06-15 00:00:00') TO ('2020-06-16 00:00:00'),
                  test3_p2020_06_16 FOR VALUES FROM ('2020-06-16 00:00:00') TO ('2020-06-17 00:00:00'),
                  test3_p2020_06_17 FOR VALUES FROM ('2020-06-17 00:00:00') TO ('2020-06-18 00:00:00'),
                  test3_p2020_06_18 FOR VALUES FROM ('2020-06-18 00:00:00') TO ('2020-06-19 00:00:00'),
                  test3_p2020_06_19 FOR VALUES FROM ('2020-06-19 00:00:00') TO ('2020-06-20 00:00:00'),
                  test3_p2020_06_20 FOR VALUES FROM ('2020-06-20 00:00:00') TO ('2020-06-21 00:00:00'),
                  test3_p2020_06_21 FOR VALUES FROM ('2020-06-21 00:00:00') TO ('2020-06-22 00:00:00'),
                  test3_p2020_06_22 FOR VALUES FROM ('2020-06-22 00:00:00') TO ('2020-06-23 00:00:00'),
                  test3_p2020_06_23 FOR VALUES FROM ('2020-06-23 00:00:00') TO ('2020-06-24 00:00:00'),
                  test3_p2020_06_24 FOR VALUES FROM ('2020-06-24 00:00:00') TO ('2020-06-25 00:00:00'),
                  test3_p2020_06_25 FOR VALUES FROM ('2020-06-25 00:00:00') TO ('2020-06-26 00:00:00'),
                  test3_p2020_06_26 FOR VALUES FROM ('2020-06-26 00:00:00') TO ('2020-06-27 00:00:00'),
                  test3_p2020_06_27 FOR VALUES FROM ('2020-06-27 00:00:00') TO ('2020-06-28 00:00:00'),
                  test3_default DEFAULT
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章