partitioned table

Поиск
Список
Период
Сортировка
От Pepe TD Vo
Тема partitioned table
Дата
Msg-id 148443228.5959267.1578589603211@mail.yahoo.com
обсуждение исходный текст
Ответы Re: partitioned table  (Michael Lewis <mlewis@entrata.com>)
Re: partitioned table  (Michael Lewis <mlewis@entrata.com>)
Список pgsql-admin
I have table and partitioned for year year like this:

CREATE TABLE ecisdrdm.bnft_curr_fact
(bnft_fact_id numeric(38),
bene_cntry_of_brth_id  numeric(38),
bene_cntry_of_rsdc_id numeric(38),
bene_cntry_of_ctznshp_id numeric(38),
frm_id numeric(38),
svc_ctr_id numeric(38),
actn_dt_in_id numeric(38),
actn_tm_in_id numeric(38),
src_sys_id numeric(38),
bnft_hist_actn_id numeric(38),
bene_id numeric(38),
bene_end_dt_id numeric(38),
petnr_app_id numeric(38),
atty_id numeric(38),
uscis_emp_id numeric(38),
application_id numeric(38) default -1000000,
rmtr_id numeric(38),
prpr_id numeric(38),
mig_filename varchar(80),
mig_insert_dt timestamp,
mig_modified_dt timestamp
) partition by range (actn_dt_in_id)
TABLESPACE ecisdrdm_data;


CREATE INDEX bnftn_fact_frmid_bmx1 ON ecisdrdm.bnft_curr_fact (frm_id)
TABLESPACE ecisdrdm_index;

CREATE INDEX bnftn_fact_attyid_bmx1 ON ecisdrdm.bnft_curr_fact (atty_id)
TABLESPACE ecisdrdm_index;

CREATE INDEX bnftn_fact_applicatiid_bti1 ON ecisdrdm.bnft_curr_fact (applicatiON_id)
TABLESPACE ecisdrdm_index;

CREATE INDEX src_sys_id_actn_dt_bmx1 ON ecisdrdm.bnft_curr_fact (src_sys_id, actn_dt_in_id)
TABLESPACE ecisdrdm_index;

CREATE INDEX bnftn_fact_bnftfactid_bti1 ON ecisdrdm.bnft_curr_fact (bnft_fact_id)
TABLESPACE ecisdrdm_index;

CREATE INDEX bnftn_fact_actndtinid_bmx1 ON ecisdrdm.bnft_curr_fact (actn_dt_in_id)
TABLESPACE ecisdrdm_index;

CREATE INDEX bnftn_fact_coposit3_bmx1 ON ecisdrdm.bnft_curr_fact (svc_ctr_id, uscis_emp_id)
TABLESPACE ecisdrdm_index;

CREATE INDEX src_sys_id_actn_dt_saa ON ecisdrdm.bnft_curr_fact (src_sys_id, actn_dt_in_id, applicatiON_id)
TABLESPACE ecisdrdm_index;

CREATE INDEX bnftn_fact_beneid_bmx1 ON ecisdrdm.bnft_curr_fact (bene_id)
TABLESPACE ecisdrdm_index;

CREATE INDEX bnftn_fact_petnrappid_bti1 ON ecisdrdm.bnft_curr_fact (petnr_app_id)
TABLESPACE ecisdrdm_index;

CREATE INDEX bnftn_fact_uscisempid_bmx1 ON ecisdrdm.bnft_curr_fact (uscis_emp_id)
TABLESPACE ecisdrdm_index;

CREATE INDEX bnftn_fact_bnfhisactid_bmx1 ON ecisdrdm.bnft_curr_fact (bnft_hist_actn_id)
TABLESPACE ecisdrdm_index;

CREATE INDEX bnftn_fact_src_sys_id_bmx1 ON ecisdrdm.bnft_curr_fact (src_sys_id)
TABLESPACE ecisdrdm_index;

CREATE INDEX bnftn_fact_benenddtid_bmx1 ON ecisdrdm.bnft_curr_fact (bene_end_dt_id)
TABLESPACE ecisdrdm_index;

CREATE INDEX bnftn_fact_prprid_bmx1 ON ecisdrdm.bnft_curr_fact (prpr_id)
TABLESPACE ecisdrdm_index;

CREATE INDEX bnftn_fact_svcctrid_bmx1 ON ecisdrdm.bnft_curr_fact (svc_ctr_id)
TABLESPACE ecisdrdm_index;

CREATE INDEX bnftn_fact_benctrysdcid_bmx1 ON ecisdrdm.bnft_curr_fact (bene_cntry_of_rsdc_id)
TABLESPACE ecisdrdm_index;

CREATE INDEX bnftn_fact_benctrybrtid_bmx1 ON ecisdrdm.bnft_curr_fact (bene_cntry_of_brth_id)
TABLESPACE ecisdrdm_index;

as same as stg_bnft_curr_fact table, it's partitioned too.
when I manually mocking the data into both tables are fine and when I run the procedure, I get errorcode: 42P10 MSG: there is no unique or exclusion constraint matching on the CONFLICT specification

the procedure is 

CREATE OR REPLACE FUNCTION ecisdrdm.pr_mig_stg_bnft_curr_fact(
OUT v_ret text)
    RETURNS text
    LANGUAGE 'plpgsql'

    COST 100
    VOLATILE 
AS $BODY$ 
DECLARE 
v_module           text = 'pr_mig_stg_bnft_curr_fact ';
host text = inet_server_addr();
errorcode           text;
errormsg        text;
errormsg_detail  text;
    errormsg_hint text;
BEGIN

----
-- MERGING: STG_BNFT_CURR_FACT into BNFT_CURR_FACT
----

INSERT INTO ecisdrdm.bnft_curr_fact AS prod (bnft_fact_id, bene_cntry_of_brth_id, bene_cntry_of_rsdc_id, 
bene_cntry_of_ctznshp_id, frm_id, svc_ctr_id, actn_dt_in_id, actn_tm_in_id, src_sys_id, 
bnft_hist_actn_id, bene_id, bene_end_dt_id, petnr_app_id, atty_id, uscis_emp_id, application_id, 
rmtr_id, prpr_id, mig_filename)
SELECT stg.bnft_fact_id, stg.bene_cntry_of_brth_id, stg.bene_cntry_of_rsdc_id, 
stg.bene_cntry_of_ctznshp_id, stg.frm_id, stg.svc_ctr_id, stg.actn_dt_in_id, stg.actn_tm_in_id, stg.src_sys_id, 
stg.bnft_hist_actn_id, stg.bene_id, stg.bene_end_dt_id, stg.petnr_app_id, stg.atty_id, stg.uscis_emp_id, stg.application_id, 
stg.rmtr_id, stg.prpr_id, stg.mig_filename
FROM ecisdrdm.stg_bnft_curr_fact stg
ON CONFLICT ("bnft_fact_id") DO UPDATE 
SET (bnft_fact_id, bene_cntry_of_brth_id, bene_cntry_of_rsdc_id, 
bene_cntry_of_ctznshp_id, frm_id, svc_ctr_id, actn_dt_in_id, actn_tm_in_id, src_sys_id, 
bnft_hist_actn_id, bene_id, bene_end_dt_id, petnr_app_id, atty_id, uscis_emp_id, application_id, 
rmtr_id, prpr_id, mig_filename, mig_modified_dt)
(SELECT stg.bnft_fact_id, stg.bene_cntry_of_brth_id, stg.bene_cntry_of_rsdc_id, 
stg.bene_cntry_of_ctznshp_id, stg.frm_id, stg.svc_ctr_id, stg.actn_dt_in_id, stg.actn_tm_in_id, stg.src_sys_id, 
stg.bnft_hist_actn_id, stg.bene_id, stg.bene_end_dt_id, stg.petnr_app_id, stg.atty_id, stg.uscis_emp_id, stg.application_id, 
stg.rmtr_id, stg.prpr_id, stg.mig_filename, current_timestamp
FROM ecisdrdm.stg_bnft_curr_fact stg
WHERE prod.application_id = stg.application_id
);

   ----
   -- Set return to "Success" for pr_merge_staging_tables function
   ----
v_ret := 'Success';  

EXCEPTION
WHEN OTHERS THEN
  GET STACKED DIAGNOSTICS 
errormsg = MESSAGE_TEXT,
        errormsg_detail = PG_EXCEPTION_DETAIL,
        errormsg_hint = PG_EXCEPTION_HINT;  
errorcode := SQLSTATE;
        v_ret := concat('ERROR - FUNC: ' || v_module || ' ERRORCODE: ', errorcode, ' MSG: ' || errormsg || ' ', errormsg_detail || ' ', errormsg_hint);

-- NOTE: Only writes to errorlog table if function is called directly
-- If called through the pr_merge_staging_tables function the exception is raised and caught there instead
PERFORM ecisdrdm.pr_write_error_log( CURRENT_USER, host, v_module, errorcode, v_ret );

end;
$BODY$;


when I select the table from pgadmin tool, it's not opened and popped up with a blank window with title "index out or range" I do have index on it.

regards,


Bach-Nga

No one in this world is pure and perfect.  If you avoid people for their mistakes you will be alone. So judge less, love and forgive more.
To call him a dog hardly seems to do him justice though in as much as he had four legs, a tail, and barked, I admit he was, to all outward appearances. But to those who knew him well, he was a perfect gentleman (Hermione Gingold)

**Live simply **Love generously **Care deeply **Speak kindly.
*** Genuinely rich *** Faithful talent *** Sharing success

В списке pgsql-admin по дате отправления:

Предыдущее
От: bvo
Дата:
Сообщение: misbehavior slave
Следующее
От: Michael Lewis
Дата:
Сообщение: Re: partitioned table