On Thu, Nov 01, 2018 at 12:27:23PM -0300, Alvaro Herrera wrote: > Ah, now this is interesting. Can you please supply the definition of > the table? Attached. > I'm wondering if there is a partitioned table with an FK to > this one. There is. Both ref.auto_hint and clin.suppressed_hint are using inheritance (from audit.audit_fields). However, GNUmed does not use inheritance for explicit partitioning but rather similar to how classes and subclasses are used in OO languages. > I'm not quite seeing how come 'tup' is NULL there. Can you > 'print trigdata' in frame 2? Sure, how ? :-) (I can surely type "print trigdata" but does that already auto-select from "frame 2" ?) Karsten -- GPG 40BE 5B0E C98E 1713 AFA6 5BC0 3BEA AC80 7D4F C89B
Ausgabeformat ist »wrapped«. Tabelle »audit.audit_fields« Spalte | Typ | Sortierfolge | NULL erlaubt? | Vorgabewert | Speicherung | Statistikziel | Beschreibung ---------------+--------------------------+--------------+---------------+------------------------------------------------------+-------------+---------------+-------------------------------------------------------- pk_audit | integer | | not null | nextval('audit.audit_fields_pk_audit_seq'::regclass) | plain | | row_version | integer | | not null | 0 | plain | | the version of the row; mainly just a count modified_when | timestamp with time zone | | not null | CURRENT_TIMESTAMP | plain | | when has this row been committed (created/modified) modified_by | name | | not null | CURRENT_USER | plain | | by whom has this row been committed (created/modified) Indexe: "audit_fields_pkey" PRIMARY KEY, btree (pk_audit) Check-Constraints: "audit_audit_fields_sane_modified_when" CHECK ((modified_when <= clock_timestamp()) IS TRUE) Regeln: audit_fields_no_del AS ON DELETE TO audit.audit_fields DO INSTEAD NOTHING audit_fields_no_ins AS ON INSERT TO audit.audit_fields DO INSTEAD NOTHING audit_fields_no_upd AS ON UPDATE TO audit.audit_fields DO INSTEAD NOTHING Kindtabellen: bill.bill, bill.bill_item, blobs.doc_desc, blobs.doc_med, blobs.lnk_doc2hospital_stay, blobs.lnk_doc_med2episode, cfg.report_query, clin.allergy_state, clin.clin_diag, clin.clin_item_type, clin.clin_root_item, clin.encounter, clin.episode, clin.external_care, clin.fhx_relation_type, clin.form_data, clin.health_issue, clin.incoming_data_unmatchable, clin.incoming_data_unmatched, clin.lnk_code2item_root, clin.lnk_constraint2vacc_course, clin.lnk_pat2vaccination_course, clin.lnk_substance2episode, clin.lnk_tst2norm, clin.lnk_type2item, clin.lnk_vaccination_course2schedule, clin.lnk_vaccine2inds, clin.patient, clin.review_root, clin.suppressed_hint, clin.test_org, clin.test_panel, clin.test_type, clin.vaccination_course, clin.vaccination_course_constraint, clin.vaccination_definition, clin.vaccination_schedule, clin.vacc_indication, clin.vaccine, clin.vaccine_batches, clin.vacc_route, clin.waiting_list, de_de.beh_fall_typ, de_de.lab_test_gnr, de_de.prax_geb_paid, dem.address, dem.gender_label, dem.identity, dem.identity_tag, dem.inbox_item_category, dem.inbox_item_type, dem.lnk_identity2ext_id, dem.lnk_job2person, dem.lnk_org_unit2comm, dem.lnk_org_unit2ext_id, dem.lnk_person2relative, dem.message_inbox, dem.occupation, dem.org, dem.org_unit, dem.praxis_branch, dem.region, dem.relation_types, dem.staff, dem.street, dem.urb, gm.access_log, ref.auto_hint, ref.branded_drug, ref.consumable_substance, ref.data_source, ref.lnk_substance2brand, ref.paperwork_templates, ref.tag_image
Ausgabeformat ist »wrapped«. Tabelle »ref.auto_hint« Spalte | Typ | Sortierfolge | NULL erlaubt? | Vorgabewert | Speicherung | Statistikziel | Beschreibung ----------------------+--------------------------+--------------+---------------+------------------------------------------------------+-------------+---------------+------------------------------------------------------------------------ pk_audit | integer | | not null | nextval('audit.audit_fields_pk_audit_seq'::regclass) | plain | | row_version | integer | | not null | 0 | plain | | modified_when | timestamp with time zone | | not null | CURRENT_TIMESTAMP | plain | | modified_by | name | | not null | CURRENT_USER | plain | | pk | integer | | not null | nextval('ref.auto_hint_pk_seq'::regclass) | plain | | query | text | | | | extended | | This query is run against the database. title | text | | | | extended | | A short title to summarize and identify the hint. hint | text | | | | extended | | When the query returns true this is the hint that should be displayed. url | text | | | | extended | | An URL relevant to the hint. is_active | boolean | | not null | true | plain | | Whether or not this query/hint is active. source | text | | | | extended | | Who provided query and hint. lang | text | | | | extended | | The language the hint is written in. recommendation_query | text | | | | extended | | Indexe: "auto_hint_pkey" PRIMARY KEY, btree (pk) "ref_auto_hint_uniq_query" UNIQUE CONSTRAINT, btree (query) "ref_auto_hint_uniq_title" UNIQUE CONSTRAINT, btree (title) Check-Constraints: "audit_audit_fields_sane_modified_when" CHECK ((modified_when <= clock_timestamp()) IS TRUE) "ref_auto_hint_sane_hint" CHECK (gm.is_null_or_blank_string(hint) IS FALSE) "ref_auto_hint_sane_lang" CHECK (gm.is_null_or_blank_string(lang) IS FALSE) "ref_auto_hint_sane_query" CHECK (gm.is_null_or_blank_string(query) IS FALSE) "ref_auto_hint_sane_rec_query" CHECK (gm.is_null_or_non_empty_string(recommendation_query)) "ref_auto_hint_sane_source" CHECK (gm.is_null_or_blank_string(source) IS FALSE) "ref_auto_hint_sane_title" CHECK (gm.is_null_or_blank_string(title) IS FALSE) "ref_auto_hint_sane_url" CHECK (gm.is_null_or_non_empty_string(url)) Fremdschlüsselverweise von: TABLE "clin.suppressed_hint" CONSTRAINT "fk_clin_suppressed_hint_fk_hint" FOREIGN KEY (fk_hint) REFERENCES ref.auto_hint(pk) ON UPDATE RESTRICT ON DELETE CASCADE Trigger: zt_del_auto_hint BEFORE DELETE ON ref.auto_hint FOR EACH ROW EXECUTE PROCEDURE audit.ft_del_auto_hint() zt_ins_auto_hint BEFORE INSERT ON ref.auto_hint FOR EACH ROW EXECUTE PROCEDURE audit.ft_ins_auto_hint() zt_upd_auto_hint BEFORE UPDATE ON ref.auto_hint FOR EACH ROW EXECUTE PROCEDURE audit.ft_upd_auto_hint() Erbt von: audit.audit_fields
Ausgabeformat ist »wrapped«. Tabelle »clin.suppressed_hint« Spalte | Typ | Sortierfolge | NULL erlaubt? | Vorgabewert | Speicherung | Statistikziel | Beschreibung -----------------+--------------------------+--------------+---------------+------------------------------------------------------+-------------+---------------+----------------------------------------------------------- pk_audit | integer | | not null | nextval('audit.audit_fields_pk_audit_seq'::regclass) | plain | | row_version | integer | | not null | 0 | plain | | modified_when | timestamp with time zone | | not null | CURRENT_TIMESTAMP | plain | | modified_by | name | | not null | CURRENT_USER | plain | | pk | integer | | not null | nextval('clin.suppressed_hint_pk_seq'::regclass) | plain | | fk_encounter | integer | | not null | | plain | | the encounter during which this hint was first suppressed fk_hint | integer | | not null | | plain | | the hint that is suppressed suppressed_by | name | | not null | CURRENT_USER | plain | | who suppressed this hint suppressed_when | timestamp with time zone | | not null | statement_timestamp() | plain | | when was this hint suppressed rationale | text | | | | extended | | rationale on why this hint is suppressed in this patient md5_sum | text | | | | extended | | md5 of relevant fields of this hint Indexe: "suppressed_hint_pkey" PRIMARY KEY, btree (pk) "idx_suppressed_hint_fk_encounter" btree (fk_encounter) "idx_suppressed_hint_fk_hint" btree (fk_hint) Check-Constraints: "audit_audit_fields_sane_modified_when" CHECK ((modified_when <= clock_timestamp()) IS TRUE) "clin_suppressed_hint_sane_by" CHECK (length(suppressed_by::text) > 0) "clin_suppressed_hint_sane_md5" CHECK (gm.is_null_or_blank_string(md5_sum) IS FALSE) "clin_suppressed_hint_sane_rationale" CHECK (gm.is_null_or_blank_string(rationale) IS FALSE) Fremdschlüssel-Constraints: "fk_clin_suppressed_hint_fk_encounter" FOREIGN KEY (fk_encounter) REFERENCES clin.encounter(pk) ON UPDATE RESTRICT ON DELETE RESTRICT "fk_clin_suppressed_hint_fk_hint" FOREIGN KEY (fk_hint) REFERENCES ref.auto_hint(pk) ON UPDATE RESTRICT ON DELETE CASCADE Trigger: tr_sanity_check_uniq_hint_per_pat_ins_upd AFTER INSERT OR UPDATE ON clin.suppressed_hint DEFERRABLE INITIALLY DEFERRED FOR EACH ROW EXECUTE PROCEDURE clin.trf_sanity_check_uniq_hint_per_pat_ins_upd() zt_del_suppressed_hint BEFORE DELETE ON clin.suppressed_hint FOR EACH ROW EXECUTE PROCEDURE audit.ft_del_suppressed_hint() zt_ins_suppressed_hint BEFORE INSERT ON clin.suppressed_hint FOR EACH ROW EXECUTE PROCEDURE audit.ft_ins_suppressed_hint() zt_upd_suppressed_hint BEFORE UPDATE ON clin.suppressed_hint FOR EACH ROW EXECUTE PROCEDURE audit.ft_upd_suppressed_hint() zzz_tr_announce_clin_suppressed_hint_del AFTER DELETE ON clin.suppressed_hint DEFERRABLE INITIALLY DEFERRED FOR EACH ROW EXECUTE PROCEDURE gm.trf_announce_table_del('operation=DELETE::table=clin.suppressed_hint::PK name=pk', 'select $1.pk', 'select fk_patient from clin.encounter where pk = $1.fk_encounter limit 1') zzz_tr_announce_clin_suppressed_hint_ins_upd AFTER INSERT OR UPDATE ON clin.suppressed_hint DEFERRABLE INITIALLY DEFERRED FOR EACH ROW EXECUTE PROCEDURE gm.trf_announce_table_ins_upd('table=clin.suppressed_hint::PK name=pk', 'select $1.pk', 'select fk_patient from clin.encounter where pk = $1.fk_encounter limit 1') Erbt von: audit.audit_fields