好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > 淺談PostgreSQL 11 新特性之默認分區

淺談PostgreSQL 11 新特性之默認分區

熱門標簽:美容工作室地圖標注 漯河外呼電話系統 外呼調研系統 打電話智能電銷機器人授權 重慶自動外呼系統定制 地圖標注和圖片名稱的區別 海豐有多少商家沒有地圖標注 辦公外呼電話系統 合肥公司外呼系統運營商

文章目錄

PosgtreSQL 11 支持為分區表創建一個默認(DEFAULT)的分區,用于存儲無法匹配其他任何分區的數據。顯然,只有 RANGE 分區表和 LIST 分區表需要默認分區。

CREATE TABLE measurement (
  city_id     int not null,
  logdate     date not null,
  peaktemp    int,
  unitsales    int
) PARTITION BY RANGE (logdate);
CREATE TABLE measurement_y2018 PARTITION OF measurement
  FOR VALUES FROM ('2018-01-01') TO ('2019-01-01');

以上示例只創建了 2018 年的分區,如果插入 2017 年的數據,系統將會無法找到相應的分區:

INSERT INTO measurement(city_id,logdate,peaktemp,unitsales)
VALUES (1, '2017-10-01', 50, 200);
ERROR: no partition of relation "measurement" found for row
DETAIL: Partition key of the failing row contains (logdate) = (2017-10-01).

使用默認分區可以解決這類問題。創建默認分區時使用 DEFAULT 子句替代 FOR VALUES 子句。

CREATE TABLE measurement_default PARTITION OF measurement DEFAULT;
\d+ measurement
                 Table "public.measurement"
 Column  | Type  | Collation | Nullable | Default | Storage | Stats target | Description 
-----------+---------+-----------+----------+---------+---------+--------------+-------------
 city_id  | integer |      | not null |     | plain  |       | 
 logdate  | date  |      | not null |     | plain  |       | 
 peaktemp | integer |      |     |     | plain  |       | 
 unitsales | integer |      |     |     | plain  |       | 
Partition key: RANGE (logdate)
Partitions: measurement_y2018 FOR VALUES FROM ('2018-01-01') TO ('2019-01-01'),
      measurement_default DEFAULT

有了默認分區之后,未定義分區的數據將會插入到默認分區中:

INSERT INTO measurement(city_id,logdate,peaktemp,unitsales)
VALUES (1, '2017-10-01', 50, 200);
INSERT 0 1
select * from measurement_default;
 city_id | logdate  | peaktemp | unitsales 
---------+------------+----------+-----------
    1 | 2017-10-01 |    50 |    200
(1 row)

默認分區存在以下限制:

一個分區表只能擁有一個 DEFAULT 分區;

對于已經存儲在 DEFAULT 分區中的數據,不能再創建相應的分區;參見下文示例;

如果將已有的表掛載為 DEFAULT 分區,將會檢查該表中的所有數據;如果在已有的分區中存在相同的數據,將會產生一個錯誤;

哈希分區表不支持 DEFAULT 分區,實際上也不需要支持。

使用默認分區也可能導致一些不可預見的問題。例如,往 measurement 表中插入一條 2019 年的數據,由于沒有創建相應的分區,該記錄同樣會分配到默認分區:

INSERT INTO measurement(city_id,logdate,peaktemp,unitsales)
VALUES (1, '2019-03-25', 66, 100);
INSERT 0 1
select * from measurement_default;
 city_id | logdate  | peaktemp | unitsales 
---------+------------+----------+-----------
    1 | 2017-10-01 |    50 |    200
    1 | 2019-03-25 |    66 |    100
(2 rows)

此時,如果再創建 2019 年的分區,操作將會失敗。因為添加新的分區需要修改默認分區的范圍(不再包含 2019 年的數據),但是默認分區中已經存在 2019 年的數據。

CREATE TABLE measurement_y2019 PARTITION OF measurement
  FOR VALUES FROM ('2019-01-01') TO ('2020-01-01');
ERROR: updated partition constraint for default partition "measurement_default" would be violated by some row

為了解決這個問題,可以先將默認分區從分區表中卸載(DETACH PARTITION),創建新的分區,將默認分區中的相應的數據移動到新的分區,最后重新掛載默認分區。

ALTER TABLE measurement DETACH PARTITION measurement_default;
CREATE TABLE measurement_y2019 PARTITION OF measurement
  FOR VALUES FROM ('2019-01-01') TO ('2020-01-01');
INSERT INTO measurement_y2019
SELECT * FROM measurement_default WHERE logdate >= '2019-01-01' AND logdate  '2020-01-01';
INSERT 0 1
DELETE FROM measurement_default WHERE logdate >= '2019-01-01' AND logdate  '2020-01-01';
DELETE 1
ALTER TABLE measurement ATTACH PARTITION measurement_default DEFAULT;
CREATE TABLE measurement_y2020 PARTITION OF measurement
  FOR VALUES FROM ('2020-01-01') TO ('2021-01-01');
\d+ measurement
                 Table "public.measurement"
 Column  | Type  | Collation | Nullable | Default | Storage | Stats target | Description 
-----------+---------+-----------+----------+---------+---------+--------------+-------------
 city_id  | integer |      | not null |     | plain  |       | 
 logdate  | date  |      | not null |     | plain  |       | 
 peaktemp | integer |      |     |     | plain  |       | 
 unitsales | integer |      |     |     | plain  |       | 
Partition key: RANGE (logdate)
Partitions: measurement_y2018 FOR VALUES FROM ('2018-01-01') TO ('2019-01-01'),
      measurement_y2019 FOR VALUES FROM ('2019-01-01') TO ('2020-01-01'),
      measurement_y2020 FOR VALUES FROM ('2020-01-01') TO ('2021-01-01'),
      measurement_default DEFAULT

官方文檔:Table Partitioning

補充:postgresql10以上的自動分區分表功能

一.列分表

1.首先創建主分區表:

create table fenbiao( 
id int, 
year varchar 
) partition by list(year)

這里設置的是根據year列進行數據分表;創建后使用navicat是看不到的;

2.創建分表:

create table fenbiao_2017 partition of fenbiao for values in ('2017')

create table fenbiao_2018 partition of fenbiao for values in ('2018')

這樣這兩天數據會依靠規則插入到不同分表中,如果插入一條不符合規則的數據,則會報錯誤:no partition of relation "fenbiao" found for row.

二.范圍分表

1.以year列為范圍進行分表

create table fenbiao2( 
id int, 
year varchar 
) partition by range(year)

2.創建分表

create table fenbiao2_2018_2020 partition of fenbiao2 for values from ('2018') to ('2020')

create table fenbiao2_2020_2030 partition of fenbiao2 for values from ('2020') to ('2030')

注意:此時插入year=2020會插入到下面的表;如下面表范圍為2021到2030,則會報錯;同時插入2030也會報錯;范圍相當于時a=yearb;

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • PostgreSQL LIST、RANGE 表分區的實現方案
  • PostgreSQL 創建表分區
  • 淺析postgresql 數據庫 TimescaleDB 修改分區時間范圍
  • 利用python為PostgreSQL的表自動添加分區
  • 如何為PostgreSQL的表自動添加分區
  • PostgreSQL之分區表(partitioning)
  • PostgreSQL分區表(partitioning)應用實例詳解
  • PostgreSQL教程(三):表的繼承和分區表詳解
  • 淺談PostgreSQL表分區的三種方式

標簽:烏海 珠海 蚌埠 來賓 晉城 株洲 錦州 衡陽

巨人網絡通訊聲明:本文標題《淺談PostgreSQL 11 新特性之默認分區》,本文關鍵詞  淺談,PostgreSQL,新特性,新,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《淺談PostgreSQL 11 新特性之默認分區》相關的同類信息!
  • 本頁收集關于淺談PostgreSQL 11 新特性之默認分區的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 激情播放器| 成年人羞羞视频| 欧美牲| 扒开内裤边吃奶XXOO| 宅男噜噜66国产精品观看| 99国产情在线视频| 亚洲色拍偷拍精二区三区在线播放| 国产twink男同chinese| 色偷偷亚洲第一综合| 欧美亚洲国产一区二区三区| 日本激情图片| 18禁裸体爆乳?动漫无码| 欧美日韩国产三级| 色狗综合网| 三级黄色电影片| 极品嫩苞自慰喷水爆白浆| 色综合天天狠 天天透天天伊人 | 国产精品嫩草影院88v| 国产呦萝资源网站| 朱竹清3d被吸乳羞羞漫画| 青青草国产三级精品三级| 女人做多了下面会松吗| 国产人成精品| 老师再深点灬舒服灬太大了小说d 挺进新婚女警的身体里 | 激情性生活视频在线播放免费观看| 久久久熟妇熟女ⅩXXX| 1000部啪啪| 爽18p| 韩国免费一级a—片在线播放| 啦啦啦中文免费视频高清观看| 国产一区二区三区 精品| 久久久久久精品免费免费自在传媒| 新手如何快速达到高c视频| 男阳茎进女阳道粉嫩粉嫩| 欧美日韩中字国产| 男男调教顶撞喘嗯啊h| 天天躁日日躁狠狠躁张津瑜| 91精品国产一区二区三区| 夫妇交换系列小说h| 琪琪午夜影院| 91成人无码看片在线观看网址|