La CREAR O SUSTITUIR la FUNCIÓN auto_insert_into_tbl_partition () RETURNS de activación AS $ $ El cuerpo del DECLARE time_column_name texto ; - un campo de hora, la fecha está determinada por el tiempo de esta sub-mesa, parte de una necesaria curMMDD VARCHAR ( 16 ); - cadena de formato 'AAAAMMDD' , usado tabla sub-partición sufijo ISEXIST Boolean; - el análisis de la sub-tabla adicional ya existe strSQL texto ; Begin - obtener del time_column_name parámetro de llamada time_column_name: = TG_ARGV [ 0 ] ; - El análisis de la tabla de particiones correspondientes ya existe la EJECUTAR '. SELECT 1 $ ' || time_column_name la EN strSQL el uso de las nuevas; : curMMDD = TO_CHAR (strSQL :: marca de tiempo , ' AAAAMMDD ' ;) SELECT COUNT ( . 1 ) de la EN ISEXIST desde la entrada pg_class que DONDE nombre_rel = ( ' t_audit_ ' || curMMDD); - si no crear sub-particiones de inserción el iF (ISEXIST = false) entonces -Crear un niño hereda la tabla padre tabla de particiones strSQL: = ' la TABLA creado si existe, no t_audit_ ' || curMMDD || ' () INHERITS (t_audit); ' ; EJECUTAR strSQL; - la creación de un índice strSQL: = ' CREATE INDEX t_audit_ ' || curMMDD || ' _INDEX_ ' || time_column_name || ' ON t_audit_ ' || curMMDD || ' ( ' || time_column_name || '); ' ; La EJECUTAR strSQL; END IF ; - insertar datos en la partición niño! StrSQL: = ' INSERT INTO t_audit_ ' || curMMDD || ' SELECT * $ 1. ' ; EJECUTAR strSQL el NUEVO USO; RETURN NULL ; END $ $ el CUERPO plpgsql IDIOMA; - crear un disparador, desencadenar la operación INSERT al crear desencadenar insert_tbl_partition_trigger la ANTES DE INSERTAR eN t_audit la PARA CADA FILA EJECUTAR PROCEDIMIENTO auto_insert_into_tbl_partition ( ' tiempo ' );
El conjunto es este código, puede completar una operación simple de acuerdo con el cronograma.