postgresql 按小時分表(含觸發器)的實現方式_數據庫其它

來源:腳本之家  責任編輯:小易  

通過查找表數據文件方式 這種方法通過查找表的數據文件的方式從而確定表的創建時間,但是這種方法并不能準備查詢表的創建 時間www.13333515.buzz防采集請勿采集本網。

本人后端開發,因為業務需求需要使用分表方式進行數據存儲。結合網上的資料最后使用的以下方式:

可以先執行update語句(update的條件是存在的判斷條件),然后調用get diagnostics獲得上一個SQL語句執行所影響的行數,如果影響行數為0,則說明不存在,那么再執行insert語句。結構類似: declare

CREATE OR REPLACE FUNCTION auto_insert_into_tbl_partition() RETURNS trigger AS$BODY$DECLARE time_column_name text ; -- 父表中用于分區的時間字段的名稱[必須首先初始化!!] curMM varchar(16); -- 'YYYYMM'字串,用做分區子表的后綴 isExist boolean; -- 分區子表,是否已存在 strSQL text; BEGIN -- 調用前,必須首先初始化(時間字段名):time_column_name [直接從調用參數中獲取!!] time_column_name := TG_ARGV[0]; -- 判斷對應分區表 是否已經存在? EXECUTE 'SELECT $1.'||time_column_name INTO strSQL USING NEW; curMM := to_char( strSQL::timestamp , 'YYYYMMDDHH' ); select count(1) INTO isExist from pg_class where relname = ('t_audit_'||curMM); -- 若不存在, 則插入前需 先創建子分區 IF ( isExist = false ) THEN -- 創建子分區表 strSQL := 'CREATE TABLE IF NOT EXISTS t_audit_'||curMM||'() INHERITS (t_audit);' ; EXECUTE strSQL; -- 創建索引 strSQL := 'CREATE INDEX t_audit_'||curMM||'_INDEX_'||time_column_name||' ON t_audit_'||curMM||' ('||time_column_name||');' ; EXECUTE strSQL; END IF; -- 插入數據到子分區! strSQL := 'INSERT INTO t_audit_'||curMM||' SELECT $1.*' ; EXECUTE strSQL USING NEW; RETURN NULL; END$BODY$ LANGUAGE plpgsql;

select*from tablename where(current_timestamp-timestampcolumnname)>'24 hours';tablename替換成表明,timestampcolumnname 替換成你說的時間戳的字段名

我是按照小時對固定的一張表進行分表的,其實可以寫活就是加個變量,拼sql的時候拼接進去。這個就是寫個函數作為觸發器的回調函數。就先判斷一下這個表有沒有,有就直接插,沒有就建表再插。

select*from(select 除了時間所有字段寫出來,to_date('COMMENTTIME','yyyy-mm-dd hh24:mi:ss')time from T_SCHOOL_RECORDCOMMENT where RECORDID=:p_cid)order by time desc;這樣試試,但是你的

要想知道每個數據庫的大小的話,步驟如下: 1、進入information_schema 數據庫(存放了其他的數據庫的信息) use information_schema;2、查詢所有數據的大小: select concat(round(sum(data_

CREATE TRIGGER insert_tbl_partition_trigger BEFORE INSERT ON t_audit FOR EACH ROW EXECUTE PROCEDURE auto_insert_into_tbl_partition('time');

1、通過命令行查詢 \\d 數據庫—得到所有表抄的名字 \\d 表名—得到表結構 2、通過SQL語句查詢襲 select*from pg_tables\"—得到當前百db中所有表的信息(這里pg_tables是系統視圖) select

建一個觸發器,在父表的插入數據的時候執行前面的那個回調函數。

ps:下面看下postgresql 表觸發器

1、先建一個函數,用來執行觸發器啟動后要執行的腳本

CREATE OR REPLACE FUNCTION "public"."trigger_day_aqi"() RETURNS "pg_catalog"."trigger" AS $BODY$BEGIN --日均值表,沒有o3,小時值表,沒有o3_8h NEW.so2iaqi=DAY_SO2_AQI(NEW.so2); NEW.no2iaqi=DAY_NO2_AQI(NEW.no2); NEW.coiaqi=DAY_CO_AQI(NEW.co); NEW.o3_8hiaqi=O3_8_AQI(NEW.o3_8h); NEW.pm10iaqi=PM10_AQI(NEW.pm10); NEW.pm25iaqi=PM25_AQI(NEW.pm25); NEW.aqi=NEW.coiaqi; NEW.primarypol='CO'; IF NEW.aqi<NEW.no2iaqi then NEW.aqi=NEW.no2iaqi; NEW.primarypol='NO2'; end if; IF NEW.aqi<NEW.so2iaqi then NEW.aqi=NEW.so2iaqi; NEW.primarypol='SO2'; end if; IF NEW.aqi<NEW.o3_8hiaqi then NEW.aqi=NEW.o3_8hiaqi; NEW.primarypol='O3_8H'; end if; IF NEW.aqi<NEW.pm10iaqi then NEW.aqi=NEW.pm10iaqi; NEW.primarypol='PM10'; end if; IF NEW.aqi<NEW.pm25iaqi then NEW.aqi=NEW.pm25iaqi; NEW.primarypol='PM2.5'; end if; IF NEW.aqi<=50 then NEW.primarypol='-'; end if; NEW.aqilevel=getRank(NEW.aqi); RETURN NEW;END;$BODY$ LANGUAGE plpgsql VOLATILE COST 100

2、建表的觸發器,

CREATE TRIGGER gk_site_day_insert BEFORE INSERT ON gk_site_day FOR EACH ROW EXECUTE PROCEDURE trigger_day_aqi();

總結

以上所述是小編給大家介紹的postgresql 按小時分表(含觸發器)的實現方式,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對真格學網網站的支持!

如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

用時間值減去獲取的周幾數值與1的差組成的日期間隔。示例:select current_timestamp-(extract(dow from current_timestamp)-1|' day'):interval其中,current_timestamp是獲取當前的時間值,extract(dow from current_timestamp)是獲取周幾的數值(以周日為一周的開始,周日,周一,周二.的數值依次為0,1,2,.),然后減去1,再和字串' day'組成一個以日為單位的interval值內容來自www.13333515.buzz請勿采集。


  • 本文相關:
  • python連接postgresql過程解析
  • postgresql圖(graph)的遞歸查詢實例
  • postgresql 如何獲取當前日期時間及注意事項
  • python 兩個數據庫postgresql對比
  • 詳解centos7下postgresql 11的安裝和配置教程
  • sql腳本函數編寫postgresql數據庫實現解析
  • centos7使用yum安裝postgresql和postgis的方法
  • postgresql物化視圖(materialized view)過程解析
  • postgresql 按小時分表(含觸發器)的實現方式
  • 很全的sql中文解釋代碼
  • 如何判斷a、b、c三個字段同時為0則不顯示這條數據
  • redis和memcache的區別總結
  • sql嵌套查詢總結
  • sql表連接圖解
  • 存儲過程返回數組對象示例代碼
  • 詳解sqlite中的數據類型
  • 數據庫查詢中遭遇特殊字符導致問題的解決方法
  • 關于sql注入繞過的一些知識點
  • PostgreSQL怎么在查詢時,得到時間對應周的周一日期
  • PostgreSQL 統計24個小時的數據 行轉列展示
  • postgresql 數據庫我要知道當前時間最近24小時的數據或者求出當前時間的前24小時是多少時間也可以求幫助
  • postgresql里面怎么得到兩個日期相差多少秒,或者多少分鐘
  • postgresql如何更新插入一起判斷執行??
  • postgresql中,怎么取一個表中24小時以前的內容? 注:比表有一個時間戳記錄此行插入的時間。
  • postgresql 全文檢索 怎么按時間范圍查詢
  • 如何檢查PostgreSQL數據庫和表大小
  • 如何查PostgreSQL 數據庫中所有的表
  • 在PostgreSQL中如何刪除重復記錄
  • 網站首頁網頁制作腳本下載服務器操作系統網站運營平面設計媒體動畫電腦基礎硬件教程網絡安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess數據庫文摘數據庫其它首頁數據庫其它python連接postgresql過程解析postgresql圖(graph)的遞歸查詢實例postgresql 如何獲取當前日期時間及注意事項python 兩個數據庫postgresql對比詳解centos7下postgresql 11的安裝和配置教程sql腳本函數編寫postgresql數據庫實現解析centos7使用yum安裝postgresql和postgis的方法postgresql物化視圖(materialized view)過程解析postgresql 按小時分表(含觸發器)的實現方式很全的sql中文解釋代碼如何判斷a、b、c三個字段同時為0則不顯示這條數據redis和memcache的區別總結sql嵌套查詢總結sql表連接圖解存儲過程返回數組對象示例代碼詳解sqlite中的數據類型數據庫查詢中遭遇特殊字符導致問題的解決方法關于sql注入繞過的一些知識點sql join on 用法mysql mysqldump命令使用詳解sqlserver、mysql、oracle三種數sql中代替like語句的另一種寫法如何讓sql運行得更快關于adox的相關知識如何取得一個表的所有字段名用逗sql server下數據庫鏈接的使用方sql server 2005的表分區sql 查詢語句積累在windows下自動備份postgresql的教程幾種常用db驅動和db連接串小結sql server 和 access 操作數據庫結構sqlhadoop map-reduce中的文件并發操作一篇文章帶你了解數據庫中join的用法數據庫設計的完整性約束表現在哪些方面一條慢sql導致購物車服務無法使用的解決方以前架征途時的合區的sql語句代碼備份sql語句中where 1=1的作用數據庫建立索引的一般依據小結
    免責聲明 - 關于我們 - 聯系我們 - 廣告聯系 - 友情鏈接 - 幫助中心 - 頻道導航
    Copyright © 2017 www.13333515.buzz All Rights Reserved
    3排列五开奖结果