PostgreSQL分区表创建、分区查询等语法示例


查询分区表

SELECT
   nmsp_parent.nspname AS parent_schema,
   parent.relname AS parent,
   nmsp_child.nspname AS child_schema,
   child.relname AS child,
   child.oid AS child_oid
FROM
   pg_inherits
JOIN pg_class parent ON pg_inherits.inhparent = parent.oid
JOIN pg_class child ON pg_inherits.inhrelid = child.oid
JOIN pg_namespace nmsp_parent ON nmsp_parent.oid = parent.relnamespace
JOIN pg_namespace nmsp_child ON nmsp_child.oid = child.relnamespace
WHERE
   parent.relname = '{tb_name}'
ORDER BY
   child_oid DESC

创建分区表及索引示例

CREATE TABLE "public"."vpn_build_inbound_log" (
    "id" int8 DEFAULT nextval('vpn_build_inbound_log_id'::regclass) NOT NULL,
    "it_code" varchar(64) COLLATE "default" DEFAULT ''::character varying NOT NULL,
    "inside_port" int4 DEFAULT 0 NOT NULL,
    "manager" varchar(64) COLLATE "default" DEFAULT ''::character varying NOT NULL,
    "employee_id" varchar(16) COLLATE "default" DEFAULT ''::character varying NOT NULL,
    "vpn_ad_group" varchar(32) COLLATE "default" DEFAULT ''::character varying NOT NULL,
    "vpn_acl_name" varchar(32) COLLATE "default" DEFAULT ''::character varying NOT NULL,
    "clock" int8 DEFAULT 0 NOT NULL,
    "application" varchar(255) COLLATE "default" DEFAULT ''::character varying,
    "protocol" int4,
    "inside_ip" inet,
    CONSTRAINT "vpn_build_inbound_log_pkey" PRIMARY KEY ("id", "clock")
) INHERITS ("public"."vpn_build_inbound_log") WITH (OIDS=FALSE);

CREATE TABLE IF NOT EXISTS "public"."vpn_build_inbound_log_default" PARTITION OF "public"."vpn_build_inbound_log" DEFAULT; // 创建default分区, 存储容错
CREATE INDEX IF NOT EXISTS "vpn_build_inbound_log_clock_idx" ON "public"."vpn_build_inbound_log" USING btree (clock); // 创建索引
CREATE INDEX IF NOT EXISTS "vpn_build_inbound_log_it_code_idx" ON "public"."vpn_build_inbound_log" USING btree (it_code); // 创建索引
CREATE UNIQUE INDEX "vpn_build_inbound_log_pkey" ON "public"."vpn_build_inbound_log" USING btree (id, clock); // 创建联合索引

根据时间段创建新分区

CREATE TABLE IF NOT EXISTS {partition_name} PARTITION OF {tb_name} FOR VALUES FROM ({start_timestamp}) TO ({end_timestamp});

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM