You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							133 lines
						
					
					
						
							4.4 KiB
						
					
					
				
			
		
		
	
	
							133 lines
						
					
					
						
							4.4 KiB
						
					
					
				CREATE OR REPLACE PROCEDURE pro_create_table() | 
						|
RETURNS VOID AS $$ | 
						|
DECLARE | 
						|
year VARCHAR(4); | 
						|
    sqlStr TEXT; | 
						|
    table_name VARCHAR(100); | 
						|
    is_exists INTEGER; | 
						|
BEGIN | 
						|
    -- 获取当前年份 | 
						|
year := TO_CHAR(CURRENT_DATE, 'YYYY'); | 
						|
 | 
						|
    -- 判断是否存在 data_min + 当前年份 的表 | 
						|
    table_name := 'data_min' || year; | 
						|
SELECT COUNT(*) INTO is_exists FROM pg_tables WHERE tablename = table_name; | 
						|
IF is_exists = 0 THEN | 
						|
        sqlStr := 'CREATE TABLE ' || table_name || ' ( | 
						|
            id BIGSERIAL PRIMARY KEY, | 
						|
            device_num VARCHAR(20), | 
						|
            device_code VARCHAR(20), | 
						|
            device_type VARCHAR(100), | 
						|
            last_value NUMERIC(24,2), | 
						|
            last_time TIMESTAMP, | 
						|
            cur_value NUMERIC(24,2), | 
						|
            cur_time TIMESTAMP, | 
						|
            used_value NUMERIC(24,2), | 
						|
            ratio INTEGER, | 
						|
            calc_value NUMERIC(24,2), | 
						|
            grade INTEGER, | 
						|
            UNIQUE (device_num, cur_time) | 
						|
        ); | 
						|
        CREATE INDEX cls_' || table_name || ' ON ' || table_name || ' (cur_time DESC)'; | 
						|
        RAISE NOTICE '%', sqlStr; | 
						|
EXECUTE sqlStr; | 
						|
END IF; | 
						|
 | 
						|
    -- 判断是否存在 data_hour + 当前年份 的表 | 
						|
    table_name := 'data_hour' || year; | 
						|
SELECT COUNT(*) INTO is_exists FROM pg_tables WHERE tablename = table_name; | 
						|
IF is_exists = 0 THEN | 
						|
        sqlStr := 'CREATE TABLE ' || table_name || ' ( | 
						|
            id BIGSERIAL PRIMARY KEY, | 
						|
            device_num VARCHAR(20), | 
						|
            device_code VARCHAR(20), | 
						|
            device_type VARCHAR(100), | 
						|
            last_value NUMERIC(24,2), | 
						|
            last_time TIMESTAMP, | 
						|
            cur_value NUMERIC(24,2), | 
						|
            cur_time TIMESTAMP, | 
						|
            used_value NUMERIC(24,2), | 
						|
            ratio INTEGER, | 
						|
            calc_value NUMERIC(24,2), | 
						|
            grade INTEGER, | 
						|
            UNIQUE (device_num, cur_time) | 
						|
        ); | 
						|
        CREATE INDEX cls_' || table_name || ' ON ' || table_name || ' (cur_time DESC)'; | 
						|
        RAISE NOTICE '%', sqlStr; | 
						|
EXECUTE sqlStr; | 
						|
END IF; | 
						|
 | 
						|
    -- 判断是否存在 data_day + 当前年份 的表 | 
						|
    table_name := 'data_day' || year; | 
						|
SELECT COUNT(*) INTO is_exists FROM pg_tables WHERE tablename = table_name; | 
						|
IF is_exists = 0 THEN | 
						|
        sqlStr := 'CREATE TABLE ' || table_name || ' ( | 
						|
            id BIGSERIAL PRIMARY KEY, | 
						|
            device_num VARCHAR(20), | 
						|
            device_code VARCHAR(20), | 
						|
            device_type VARCHAR(100), | 
						|
            last_value NUMERIC(24,2), | 
						|
            last_time TIMESTAMP, | 
						|
            cur_value NUMERIC(24,2), | 
						|
            cur_time TIMESTAMP, | 
						|
            used_value NUMERIC(24,2), | 
						|
            ratio INTEGER, | 
						|
            calc_value NUMERIC(24,2), | 
						|
            grade INTEGER, | 
						|
            UNIQUE (device_num, cur_time) | 
						|
        ); | 
						|
        CREATE INDEX cls_' || table_name || ' ON ' || table_name || ' (cur_time DESC)'; | 
						|
        RAISE NOTICE '%', sqlStr; | 
						|
EXECUTE sqlStr; | 
						|
END IF; | 
						|
 | 
						|
    -- 判断是否存在 data_month 的表 | 
						|
    table_name := 'data_month'; | 
						|
SELECT COUNT(*) INTO is_exists FROM pg_tables WHERE tablename = table_name; | 
						|
IF is_exists = 0 THEN | 
						|
        sqlStr := 'CREATE TABLE ' || table_name || ' ( | 
						|
            id BIGSERIAL PRIMARY KEY, | 
						|
            device_num VARCHAR(20), | 
						|
            device_code VARCHAR(20), | 
						|
            device_type VARCHAR(100), | 
						|
            last_value NUMERIC(24,2), | 
						|
            last_time TIMESTAMP, | 
						|
            cur_value NUMERIC(24,2), | 
						|
            cur_time TIMESTAMP, | 
						|
            used_value NUMERIC(24,2), | 
						|
            ratio INTEGER, | 
						|
            calc_value NUMERIC(24,2), | 
						|
            grade INTEGER, | 
						|
            UNIQUE (device_num, cur_time) | 
						|
        ); | 
						|
        CREATE INDEX cls_' || table_name || ' ON ' || table_name || ' (cur_time DESC)'; | 
						|
        RAISE NOTICE '%', sqlStr; | 
						|
EXECUTE sqlStr; | 
						|
END IF; | 
						|
 | 
						|
    -- 判断是否存在 data_year 的表 | 
						|
    table_name := 'data_year'; | 
						|
SELECT COUNT(*) INTO is_exists FROM pg_tables WHERE tablename = table_name; | 
						|
IF is_exists = 0 THEN | 
						|
        sqlStr := 'CREATE TABLE ' || table_name || ' ( | 
						|
            id BIGSERIAL PRIMARY KEY, | 
						|
            device_num VARCHAR(20), | 
						|
            device_code VARCHAR(20), | 
						|
            device_type VARCHAR(100), | 
						|
            last_value NUMERIC(24,2), | 
						|
            last_time TIMESTAMP, | 
						|
            cur_value NUMERIC(24,2), | 
						|
            cur_time TIMESTAMP, | 
						|
            used_value NUMERIC(24,2), | 
						|
            ratio INTEGER, | 
						|
            calc_value NUMERIC(24,2), | 
						|
            grade INTEGER, | 
						|
            UNIQUE (device_num, cur_time) | 
						|
        ); | 
						|
        CREATE INDEX cls_' || table_name || ' ON ' || table_name || ' (cur_time DESC)'; | 
						|
        RAISE NOTICE '%', sqlStr; | 
						|
EXECUTE sqlStr; | 
						|
END IF; | 
						|
 | 
						|
END; | 
						|
$$ LANGUAGE plpgsql;
 | 
						|
 |