Search Postgresql Archives

Re: problematic view definition

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I should have mentioned this is on

	PostgreSQL 8.4.5 on i486-pc-linux-gnu, compiled by GCC gcc-4.4.real (Debian 4.4.5-4) 4.4.5, 32-bit

Karsten

On Wed, Feb 09, 2011 at 11:12:01PM +0100, Karsten Hilbert wrote:
> Date: Wed, 9 Feb 2011 23:12:01 +0100
> From: Karsten Hilbert <Karsten.Hilbert@xxxxxxx>
> To: pgsql-general <pgsql-general@xxxxxxxxxxxxxx>
> Subject:  problematic view definition
> User-Agent: Mutt/1.5.20 (2009-06-14)
> 
> Hi all !
> 
> Attached find some table and view definitions from the
> GNUmed (www.gnumed.de) database.
> 
> Unfortunately I do not understand why PostgreSQL says
> 
> 	psql:xx.sql:14: ERROR:  could not implement UNION
> 	DETAIL:  Some of the datatypes only support hashing, while others only support sorting.
> 
> when I say
> 
> 	select * from dem.v_message_inbox;
> 
> I mean, I (hope I) do understand what PostgreSQL tries to
> tell me but I don't know how to find out which columns are
> affected ...
> 
> Thanks !
> 
> Karsten
> -- 
> GPG key ID E4071346 @ gpg-keyserver.de
> E167 67FD A291 2BEA 73BD  4537 78B9 A9F9 E407 1346

> Output format is wrapped.
> Expanded display is on.
>                                                Table "dem.message_inbox"
>        Column       |           Type           |                               Modifiers                               
> --------------------+--------------------------+-----------------------------------------------------------------------
>  pk_audit           | integer                  | not null default nextval('audit.audit_fields_pk_audit_seq'::regclass)
>  row_version        | integer                  | not null default 0
>  modified_when      | timestamp with time zone | not null default now()
>  modified_by        | name                     | not null default "current_user"()
>  pk                 | integer                  | not null default nextval('dem.provider_inbox_pk_seq'::regclass)
>  fk_staff           | integer                  | 
>  fk_inbox_item_type | integer                  | not null
>  comment            | text                     | 
>  data               | text                     | 
>  importance         | smallint                 | default 0
>  fk_patient         | integer                  | 
>  ufk_context        | integer[]                | 
> Indexes:
>     "provider_inbox_pkey" PRIMARY KEY, btree (pk)
> Check constraints:
>     "message_must_have_recipient" CHECK ((fk_staff IS NULL AND fk_patient IS NULL) IS FALSE)
>     "provider_inbox_comment_check" CHECK (btrim(COALESCE(comment, 'xxxDEFAULTxxx'::text)) <> ''::text)
>     "provider_inbox_importance_check" CHECK (importance = (-1) OR importance = 0 OR importance = 1)
> Foreign-key constraints:
>     "message_inbox_fk_patient_fkey" FOREIGN KEY (fk_patient) REFERENCES dem.identity(pk) ON UPDATE CASCADE ON DELETE RESTRICT
>     "provider_inbox_fk_inbox_item_type_fkey" FOREIGN KEY (fk_inbox_item_type) REFERENCES dem.inbox_item_type(pk)
>     "provider_inbox_fk_staff_fkey" FOREIGN KEY (fk_staff) REFERENCES dem.staff(pk)
> Triggers:
>     tr_message_inbox_generic_mod AFTER INSERT OR DELETE OR UPDATE ON dem.message_inbox DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE dem.trf_announce_message_inbox_generic_mod_no_pk()
>     tr_message_inbox_mod AFTER INSERT OR DELETE OR UPDATE ON dem.message_inbox DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE dem.trf_announce_message_inbox_mod()
>     zt_del_message_inbox BEFORE DELETE ON dem.message_inbox FOR EACH ROW EXECUTE PROCEDURE audit.ft_del_message_inbox()
>     zt_ins_message_inbox BEFORE INSERT ON dem.message_inbox FOR EACH ROW EXECUTE PROCEDURE audit.ft_ins_message_inbox()
>     zt_upd_message_inbox BEFORE UPDATE ON dem.message_inbox FOR EACH ROW EXECUTE PROCEDURE audit.ft_upd_message_inbox()
> Inherits: audit.audit_fields
> 
>                 View "dem.v_message_inbox"
>        Column       |           Type           | Modifiers 
> --------------------+--------------------------+-----------
>  received_when      | timestamp with time zone | 
>  provider           | text                     | 
>  importance         | integer                  | 
>  category           | text                     | 
>  l10n_category      | text                     | 
>  type               | text                     | 
>  l10n_type          | text                     | 
>  comment            | text                     | 
>  pk_context         | integer[]                | 
>  data               | text                     | 
>  pk_inbox_message   | integer                  | 
>  pk_staff           | integer                  | 
>  pk_category        | integer                  | 
>  pk_type            | integer                  | 
>  pk_patient         | integer                  | 
>  is_virtual         | boolean                  | 
>  xmin_message_inbox | xid                      | 
> View definition:
>         (        (         SELECT mi.modified_when AS received_when, ( SELECT staff.short_alias
>                                    FROM dem.staff
>                                   WHERE staff.pk = mi.fk_staff) AS provider, mi.importance, vit.category, vit.l10n_category, vit.type, vit.l10n_type, mi.comment, mi.ufk_context AS pk_context, mi.data, mi.pk AS pk_inbox_message, mi.fk_staff AS pk_staff, vit.pk_category, mi.fk_inbox_item_type AS pk_type, mi.fk_patient AS pk_patient, false AS is_virtual, mi.xmin AS xmin_message_inbox
>                            FROM dem.message_inbox mi, dem.v_inbox_item_type vit
>                           WHERE mi.fk_inbox_item_type = vit.pk_type
>                 UNION 
>                          SELECT now() AS received_when, ( SELECT staff.short_alias
>                                    FROM dem.staff
>                                   WHERE staff.pk = vo4dnd.pk_intended_reviewer) AS provider, 0 AS importance, 'clinical' AS category, _('clinical'::text) AS l10n_category, 'review docs' AS type, _('review docs'::text) AS l10n_type, ( SELECT ((((_('unreviewed documents for patient'::text) || ' ['::text) || dn.lastnames) || ', '::text) || dn.firstnames) || ']'::text
>                                    FROM dem.names dn
>                                   WHERE dn.id_identity = vo4dnd.pk_patient AND dn.active IS TRUE) AS comment, NULL::integer[] AS pk_context, NULL::text AS data, NULL::integer AS pk_inbox_message, vo4dnd.pk_intended_reviewer AS pk_staff, ( SELECT v_inbox_item_type.pk_category
>                                    FROM dem.v_inbox_item_type
>                                   WHERE v_inbox_item_type.type = 'review docs'::text) AS pk_category, ( SELECT v_inbox_item_type.pk_type
>                                    FROM dem.v_inbox_item_type
>                                   WHERE v_inbox_item_type.type = 'review docs'::text) AS pk_type, vo4dnd.pk_patient, true AS is_virtual, NULL::xid AS xmin_message_inbox
>                            FROM blobs.v_obj4doc_no_data vo4dnd
>                           WHERE vo4dnd.reviewed IS FALSE)
>         UNION 
>                  SELECT now() AS received_when, ( SELECT staff.short_alias
>                            FROM dem.staff
>                           WHERE staff.pk = vtr.pk_intended_reviewer) AS provider, 0 AS importance, 'clinical' AS category, _('clinical'::text) AS l10n_category, 'review results' AS type, _('review results'::text) AS l10n_type, ( SELECT ((((_('unreviewed (normal) results for patient'::text) || ' ['::text) || dn.lastnames) || ', '::text) || dn.firstnames) || ']'::text
>                            FROM dem.names dn
>                           WHERE dn.id_identity = vtr.pk_patient AND dn.active IS TRUE) AS comment, NULL::integer[] AS pk_context, NULL::text AS data, NULL::integer AS pk_inbox_message, vtr.pk_intended_reviewer AS pk_staff, ( SELECT v_inbox_item_type.pk_category
>                            FROM dem.v_inbox_item_type
>                           WHERE v_inbox_item_type.type = 'review results'::text) AS pk_category, ( SELECT v_inbox_item_type.pk_type
>                            FROM dem.v_inbox_item_type
>                           WHERE v_inbox_item_type.type = 'review results'::text) AS pk_type, vtr.pk_patient, true AS is_virtual, NULL::xid AS xmin_message_inbox
>                    FROM clin.v_test_results vtr
>                   WHERE vtr.reviewed IS FALSE AND (vtr.is_technically_abnormal IS FALSE OR vtr.is_technically_abnormal IS NULL AND vtr.abnormality_indicator IS NULL))
> UNION 
>          SELECT now() AS received_when, ( SELECT staff.short_alias
>                    FROM dem.staff
>                   WHERE staff.pk = vtr.pk_intended_reviewer) AS provider, 1 AS importance, 'clinical' AS category, _('clinical'::text) AS l10n_category, 'review results' AS type, _('review results'::text) AS l10n_type, ( SELECT ((((_('unreviewed (abnormal) results for patient'::text) || ' ['::text) || dn.lastnames) || ', '::text) || dn.firstnames) || ']'::text
>                    FROM dem.names dn
>                   WHERE dn.id_identity = vtr.pk_patient AND dn.active IS TRUE) AS comment, NULL::integer[] AS pk_context, NULL::text AS data, NULL::integer AS pk_inbox_message, vtr.pk_intended_reviewer AS pk_staff, ( SELECT v_inbox_item_type.pk_category
>                    FROM dem.v_inbox_item_type
>                   WHERE v_inbox_item_type.type = 'review results'::text) AS pk_category, ( SELECT v_inbox_item_type.pk_type
>                    FROM dem.v_inbox_item_type
>                   WHERE v_inbox_item_type.type = 'review results'::text) AS pk_type, vtr.pk_patient, true AS is_virtual, NULL::xid AS xmin_message_inbox
>            FROM clin.v_test_results vtr
>           WHERE vtr.reviewed IS FALSE AND (vtr.is_technically_abnormal IS TRUE OR vtr.is_technically_abnormal IS NULL AND vtr.abnormality_indicator IS NOT NULL);
> 
>                       View "clin.v_test_results"
>              Column             |           Type           | Modifiers 
> --------------------------------+--------------------------+-----------
>  pk_patient                     | integer                  | 
>  pk_test_result                 | integer                  | 
>  clin_when                      | timestamp with time zone | 
>  unified_abbrev                 | text                     | 
>  unified_name                   | text                     | 
>  unified_loinc                  | text                     | 
>  unified_val                    | text                     | 
>  unified_target_min             | numeric                  | 
>  unified_target_max             | numeric                  | 
>  unified_target_range           | text                     | 
>  soap_cat                       | text                     | 
>  comment                        | text                     | 
>  val_num                        | numeric                  | 
>  val_alpha                      | text                     | 
>  val_unit                       | text                     | 
>  conversion_unit                | text                     | 
>  val_normal_min                 | numeric                  | 
>  val_normal_max                 | numeric                  | 
>  val_normal_range               | text                     | 
>  val_target_min                 | numeric                  | 
>  val_target_max                 | numeric                  | 
>  val_target_range               | text                     | 
>  abnormality_indicator          | text                     | 
>  norm_ref_group                 | text                     | 
>  note_test_org                  | text                     | 
>  material                       | text                     | 
>  material_detail                | text                     | 
>  abbrev_tt                      | text                     | 
>  name_tt                        | text                     | 
>  loinc_tt                       | text                     | 
>  code_tt                        | text                     | 
>  coding_system_tt               | text                     | 
>  comment_tt                     | text                     | 
>  name_test_org                  | text                     | 
>  contact_test_org               | text                     | 
>  abbrev_meta                    | text                     | 
>  name_meta                      | text                     | 
>  loinc_meta                     | text                     | 
>  comment_meta                   | text                     | 
>  episode                        | text                     | 
>  health_issue                   | text                     | 
>  reviewed                       | boolean                  | 
>  is_technically_abnormal        | boolean                  | 
>  is_clinically_relevant         | boolean                  | 
>  review_comment                 | text                     | 
>  last_reviewer                  | text                     | 
>  last_reviewed                  | timestamp with time zone | 
>  review_by_you                  | boolean                  | 
>  review_by_responsible_reviewer | boolean                  | 
>  responsible_reviewer           | text                     | 
>  you_are_responsible            | boolean                  | 
>  modified_by                    | text                     | 
>  modified_when                  | timestamp with time zone | 
>  row_version                    | integer                  | 
>  pk_item                        | integer                  | 
>  pk_encounter                   | integer                  | 
>  pk_episode                     | integer                  | 
>  pk_test_type                   | integer                  | 
>  pk_intended_reviewer           | integer                  | 
>  pk_request                     | integer                  | 
>  xmin_test_result               | xid                      | 
>  pk_test_org                    | integer                  | 
>  pk_meta_test_type              | integer                  | 
>  pk_health_issue                | integer                  | 
>  pk_last_reviewer               | integer                  | 
> View definition:
>  SELECT cenc.fk_patient AS pk_patient, tr.pk AS pk_test_result, tr.clin_when, vutt.unified_abbrev, vutt.unified_name, vutt.unified_loinc, 
>         CASE
>             WHEN COALESCE(btrim(tr.val_alpha), ''::text) = ''::text THEN tr.val_num::text
>             ELSE 
>             CASE
>                 WHEN tr.val_num IS NULL THEN tr.val_alpha
>                 ELSE ((tr.val_num::text || ' ('::text) || tr.val_alpha) || ')'::text
>             END
>         END AS unified_val, COALESCE(tr.val_target_min, tr.val_normal_min) AS unified_target_min, COALESCE(tr.val_target_max, tr.val_normal_max) AS unified_target_max, COALESCE(tr.val_target_range, tr.val_normal_range) AS unified_target_range, tr.soap_cat, tr.narrative AS comment, tr.val_num, tr.val_alpha, tr.val_unit, vutt.conversion_unit, tr.val_normal_min, tr.val_normal_max, tr.val_normal_range, tr.val_target_min, tr.val_target_max, tr.val_target_range, tr.abnormality_indicator, tr.norm_ref_group, tr.note_test_org, tr.material, tr.material_detail, vutt.abbrev_tt, vutt.name_tt, vutt.loinc_tt, vutt.code_tt, vutt.coding_system_tt, vutt.comment_tt, cto.internal_name AS name_test_org, cto.contact AS contact_test_org, vutt.abbrev_meta, vutt.name_meta, vutt.loinc_meta, vutt.comment_meta, epi.description AS episode, chi.description AS health_issue, COALESCE(rtr.fk_reviewed_row, 0)::boolean AS reviewed, rtr.is_technically_abnormal, rtr.clinically_relevant AS is_clinically_relevant, rtr.comment AS review_comment, (
>  SELECT staff.short_alias
>            FROM dem.staff
>           WHERE staff.pk = rtr.fk_reviewer) AS last_reviewer, rtr.modified_when AS last_reviewed, COALESCE(rtr.fk_reviewer = (( SELECT staff.pk
>            FROM dem.staff
>           WHERE staff.db_user = "current_user"())), false) AS review_by_you, COALESCE(tr.fk_intended_reviewer = rtr.fk_reviewer, false) AS review_by_responsible_reviewer, ( SELECT staff.short_alias
>            FROM dem.staff
>           WHERE staff.pk = tr.fk_intended_reviewer) AS responsible_reviewer, COALESCE(tr.fk_intended_reviewer = (( SELECT staff.pk
>            FROM dem.staff
>           WHERE staff.db_user = "current_user"())), false) AS you_are_responsible, 
>         CASE
>             WHEN (( SELECT 1
>                FROM dem.staff
>               WHERE staff.db_user = tr.modified_by)) IS NULL THEN ('<'::text || tr.modified_by::text) || '>'::text
>             ELSE ( SELECT staff.short_alias
>                FROM dem.staff
>               WHERE staff.db_user = tr.modified_by)
>         END AS modified_by, tr.modified_when, tr.row_version, tr.pk_item, tr.fk_encounter AS pk_encounter, tr.fk_episode AS pk_episode, tr.fk_type AS pk_test_type, tr.fk_intended_reviewer AS pk_intended_reviewer, tr.fk_request AS pk_request, tr.xmin AS xmin_test_result, vutt.pk_test_org, vutt.pk_meta_test_type, epi.fk_health_issue AS pk_health_issue, rtr.fk_reviewer AS pk_last_reviewer
>    FROM clin.test_result tr
>    LEFT JOIN clin.encounter cenc ON tr.fk_encounter = cenc.pk
>    LEFT JOIN clin.episode epi ON tr.fk_episode = epi.pk
>    LEFT JOIN clin.reviewed_test_results rtr ON tr.pk = rtr.fk_reviewed_row
>    LEFT JOIN clin.health_issue chi ON epi.fk_health_issue = chi.pk, clin.v_unified_test_types vutt
>    LEFT JOIN clin.test_org cto ON vutt.pk_test_org = cto.pk
>   WHERE tr.fk_type = vutt.pk_test_type;
> 
>                     View "blobs.v_obj4doc_no_data"
>             Column             |           Type           | Modifiers 
> -------------------------------+--------------------------+-----------
>  pk_patient                    | integer                  | 
>  pk_obj                        | integer                  | 
>  seq_idx                       | integer                  | 
>  size                          | integer                  | 
>  date_generated                | timestamp with time zone | 
>  type                          | text                     | 
>  l10n_type                     | text                     | 
>  ext_ref                       | text                     | 
>  episode                       | text                     | 
>  doc_comment                   | text                     | 
>  obj_comment                   | text                     | 
>  filename                      | text                     | 
>  pk_intended_reviewer          | integer                  | 
>  reviewed                      | boolean                  | 
>  reviewed_by_you               | boolean                  | 
>  reviewed_by_intended_reviewer | boolean                  | 
>  pk_doc                        | integer                  | 
>  pk_type                       | integer                  | 
>  pk_encounter                  | integer                  | 
>  pk_episode                    | integer                  | 
>  pk_health_issue               | integer                  | 
>  xmin_doc_obj                  | xid                      | 
> View definition:
>  SELECT vdm.pk_patient, dobj.pk AS pk_obj, dobj.seq_idx, octet_length(COALESCE(dobj.data, ''::bytea)) AS size, vdm.clin_when AS date_generated, vdm.type, vdm.l10n_type, vdm.ext_ref, vdm.episode, vdm.comment AS doc_comment, dobj.comment AS obj_comment, dobj.filename, dobj.fk_intended_reviewer AS pk_intended_reviewer, (EXISTS ( SELECT 1
>            FROM blobs.reviewed_doc_objs
>           WHERE reviewed_doc_objs.fk_reviewed_row = dobj.pk)) AS reviewed, (EXISTS ( SELECT 1
>            FROM blobs.reviewed_doc_objs
>           WHERE reviewed_doc_objs.fk_reviewed_row = dobj.pk AND reviewed_doc_objs.fk_reviewer = (( SELECT staff.pk
>                    FROM dem.staff
>                   WHERE staff.db_user = "current_user"())))) AS reviewed_by_you, (EXISTS ( SELECT 1
>            FROM blobs.reviewed_doc_objs
>           WHERE reviewed_doc_objs.fk_reviewed_row = dobj.pk AND reviewed_doc_objs.fk_reviewer = dobj.fk_intended_reviewer)) AS reviewed_by_intended_reviewer, vdm.pk_doc, vdm.pk_type, vdm.pk_encounter, vdm.pk_episode, vdm.pk_health_issue, dobj.xmin AS xmin_doc_obj
>    FROM blobs.v_doc_med vdm, blobs.doc_obj dobj
>   WHERE vdm.pk_doc = dobj.fk_doc;
> 
>       View "dem.v_inbox_item_type"
>       Column      |  Type   | Modifiers 
> ------------------+---------+-----------
>  type             | text    | 
>  l10n_type        | text    | 
>  category         | text    | 
>  l10n_category    | text    | 
>  is_user_type     | boolean | 
>  is_user_category | boolean | 
>  pk_type          | integer | 
>  pk_category      | integer | 
> View definition:
>  SELECT it.description AS type, _(it.description) AS l10n_type, ic.description AS category, _(ic.description) AS l10n_category, it.is_user AS is_user_type, ic.is_user AS is_user_category, it.pk AS pk_type, it.fk_inbox_item_category AS pk_category
>    FROM dem.inbox_item_type it, dem.inbox_item_category ic
>   WHERE it.fk_inbox_item_category = ic.pk;
> 
> 
> 
> select * from dem.v_message_inbox;
> 
> psql:xx.sql:14: ERROR:  could not implement UNION
> DETAIL:  Some of the datatypes only support hashing, while others only support sorting.

> 
> -- 
> Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-general


-- 
GPG key ID E4071346 @ gpg-keyserver.de
E167 67FD A291 2BEA 73BD  4537 78B9 A9F9 E407 1346

-- 
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux