Corrupted string length for bit(n) in information schema

From: Claus Colloseus <collos(at)physik(dot)TU-Berlin(dot)DE>
To: pgsql-bugs(at)postgresql(dot)org
Subject: Corrupted string length for bit(n) in information schema
Date: 2003-12-02 00:32:53
Message-ID: 20031202012446.D25366@rosa.physik.TU-Berlin.DE
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs


Your name : Claus Colloseus
Your email address : collos(at)physik(dot)tu-berlin(dot)de

System Configuration
---------------------
Architecture : AMD Athlon XP 2000+

Operating System : Windows 2000 V. 5.00.2195

PostgreSQL version : PostgreSQL-7.4

Compiler used : precompiled for Cygwin distribution:
postgresql-7.4-1.tar.bz2 from 23.11.2003

Please enter a FULL description of your problem:
------------------------------------------------

After creating a domain of type bit(n), the length n is given back
with another number from the information schema. The same distended
number shows up f. e. in the SQL script or the Property table
of pgAdmin.

In the tested case, instead of n=10 as input, n=6 was given back.

Furthermore, a check constraint for the domain doesn't show up in
the information_schema.check_constraints table at all.

Please describe a way to repeat the problem. Please try to provide a
concise reproducible example, if at all possible:
----------------------------------------------------------------------

A test Database was created by pgAdmin III Version 1.0.1 (Oct 14 2003)
for Windows with:

CREATE DATABASE test
WITH ENCODING = 'UNICODE';

The following was executed with psql V. 7.4 in a Cygwin Bash shell:

CREATE DOMAIN public.dom_10bit
AS bit(10)
DEFAULT B'0000000000'
NOT NULL
CHECK ((VALUE = B'0000000000') OR (VALUE = B'0000000001'));

Afterwards, the following queries gave the respective results:

SELECT domain_name, data_type, character_maximum_length, character_octet_length,
domain_default, udt_name, dtd_identifier
FROM information_schema.domains
WHERE domain_name = 'dom_10bit';

domain_name | data_type | character_maximum_length | character_octet_length | domain_default | udt_name | dtd_identifier
-------------+-----------+--------------------------+------------------------+----------------------+----------+----------------
dom_10bit | bit | 6 | | B'0000000000'::"bit" | bit | 1
(1 row)

SELECT *
FROM information_schema.check_constraints;

constraint_catalog | constraint_schema | constraint_name | check_clause
--------------------+-------------------+-----------------+--------------
(0 rows)

SELECT typname, typlen, typtype, typtypmod, typdefaultbin
FROM pg_type
WHERE typname = 'dom_10bit';

typname | typlen | typtype | typtypmod | typdefaultbin
-----------+--------+---------+-----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
dom_10bit | -1 | d | 10 | {FUNCEXPR :funcid 1685 :funcresulttype 1560 :funcretset false :funcformat 2 :args ({CONST :consttype 1560 :constlen -1 :constbyval false :constisnull false :constvalue 10 [ 10 0 0 0 10 0 0 0 0 0 ]} {CONST :consttype 23 :constlen 4 :constbyval true :constisnull false :constvalue 4 [ 10 0 0 0 ]} {CONST :consttype 16 :constlen 1 :constbyval true :constisnull false :constvalue 1 [ 0 0 0 0 ]})}
(1 row)

SELECT conname, contype, conbin, consrc
FROM pg_type t INNER JOIN pg_constraint c
ON t.oid = c.contypid
WHERE typname = 'dom_10bit';

conname | contype | conbin | consrc
---------+---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------
$1 | c | {BOOLEXPR :boolop or :args ({OPEXPR :opno 1784 :opfuncid 0 :opresulttype 16 :opretset false :args ({COERCETODOMAINVALUE :typeId 1560 :typeMod 10} {CONST :consttype 1560 :constlen -1 :constbyval false :constisnull false :constvalue 10 [ 10 0 0 0 10 0 0 0 0 0 ]})} {OPEXPR :opno 1784 :opfuncid 0 :opresulttype 16 :opretset false :args ({COERCETODOMAINVALUE :typeId 1560 :typeMod 10} {CONST :consttype 1560 :constlen -1 :constbyval false :constisnull false :constvalue 10 [ 10 0 0 0 10 0 0 0 0 64 ]})})} | ((VALUE = B'0000000000'::"bit") OR (VALUE = B'0000000001'::"bit"))
(1 row)

pgAdmin3 now shows the following script (notice the double 'CHECK'):

CREATE DOMAIN public.dom_10bit
AS bit(6)
DEFAULT B'0000000000'::"bit"
NOT NULL
CHECK CHECK ((VALUE = B'0000000000'::"bit") OR (VALUE = B'0000000001'::"bit"));

If you know how this problem might be fixed, list the solution below:
---------------------------------------------------------------------

well, no, i'm a newbie to PostgreSQL

Sincerely,
Claus Colloseus

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message greg 2003-12-02 03:22:34 Re: Misplaced modifier in Postgresql license
Previous Message Bruce Momjian 2003-12-01 23:14:11 Re: PATCH: Uninitialized variable usage in contrib/pg_autovacuum