Hola comunidad buen dia para todos

Espero puedan colaborarme con la siguiente situacion tengo una tabla de
auditoria que graba todas las acciones que se realizan sobre mi tablas de
lotes que representan terrenos de casas la tabla tiene esta estructura

CREATE TABLE IF NOT EXISTS public.cat_lote_audit
(
    audit_id integer NOT NULL DEFAULT
nextval('cat_lote_audit_audit_id_seq'::regclass),
    audit_timestamp timestamp with time zone NOT NULL DEFAULT
CURRENT_TIMESTAMP,
    audit_dbuser name COLLATE pg_catalog."C" NOT NULL DEFAULT CURRENT_USER,
    audit_action character(1) COLLATE pg_catalog."default" NOT NULL,
    audit_old cat_lote,
    audit_new cat_lote,
    CONSTRAINT cat_lote_audit_pkey PRIMARY KEY (audit_id),
    CONSTRAINT cat_lote_audit_audit_action_check CHECK (audit_action = ANY
(ARRAY['I'::bpchar, 'U'::bpchar, 'D'::bpchar]))
)

como puede verse audit_old y audit_new son del tipo de la tabla a la que le
hago la auditoria y contiene todos los campos de la tabla cat_lote

cuando quiero mirar el historico de cambios hago una consulta como esta?

select row_number() over(),audit_timestamp,audit_dbuser,(audit_old).id as
id_antiguo,(audit_old).the_geom as geo_antiguo,
(audit_old).nom_cli as nom_cli_antiguo,(audit_old).v_gral as
v_gral_antiguo,(audit_new).nom_cli as nomcli_nuevo,(audit_new).v_gral as
v_gral_nuevo,(audit_new).the_geom as geo_nuevo from cat_lote_audit where
(audit_old).id = '18012200210'

Es decir dentro de audit_old o audit_new colocando los paréntesis para
encerrar al campo y luego el punto puedo referirme a un campo de la tabla y
revisar los valores antiguos y nuevos hasta ahi todo bien.

Ahora viene la interrogante resulta que tengo varios millones de registros
y efectuar una consulta como la anterior ya tarda un tiempo considerable
asi que intente crear un indice asi:

CREATE INDEX idx_audit_lote_gid_old
ON cat_lote_audit ((audit_old).id);

sin embargo obtengo este error en pgadmin

ERROR: syntax error at or near "." LINE 2: ON cat_lote_audit
((audit_old).gid); ^
Como podria crear un índice por uno de los campos dentro de audit_old o
audit_new en estos casos.

Atte

José

Reply via email to