From: | Alvaro Herrera <alvherre(at)2ndquadrant(dot)com> |
---|---|
To: | "Joshua D(dot) Drake" <jd(at)commandprompt(dot)com> |
Cc: | pgsql-hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: Odd behavior with domains |
Date: | 2016-06-24 17:35:23 |
Message-ID: | 20160624173523.GA281275@alvherre.pgsql |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Joshua D. Drake wrote:
> Yes but what makes it weird is this:
>
> postgres=# create domain text char(3);
> CREATE DOMAIN
>
> -- cool, no problem
>
> postgres=# create domain text char(2);
> ERROR: type "text" already exists
>
> -- as expected
>
> postgres=# \dD
> List of domains
> Schema | Name | Type | Modifier | Check
> --------+------+------+----------+-------
> (0 rows)
>
> -- wait what? I just created this.
The unadorned name "text" doesn't refer to the domain at this point,
since it's masked by the system type pg_catalog.text.
If you do "\dD public.*" you will see your "text" domain listed as well.
> postgres=# create domain textd char(2);
> CREATE DOMAIN
> postgres=# \dD
> List of domains
> Schema | Name | Type | Modifier | Check
> --------+-------+--------------+----------+-------
> public | textd | character(2) | |
> (1 row)
>
> -- why would this show up without changing the search path if the
> -- previous one didn't?
Because there is no system object named textd.
> postgres=# drop domain text;
> ERROR: "text" is not a domain
Right -- "text" is not a domain, it is pg_catalog.text.
> postgres=# set search_path to 'public';
> SET
> postgres=# drop domain text;
> ERROR: "text" is not a domain
> postgres=#
Here you're still referring to pg_catalog.text, since as I said above
pg_catalog is put in front of the search path if you don't specify it
anywhere. You need to add pg_catalog to search_path *after* public.
So you can do either
set search_path to 'public', 'pg_catalog'
drop domain text;
or
drop domain public.text;
> Note: If this is literally just the way it is, cool. It was just as I was
> exploring this all seemed odd.
Yes, this is the way it is, and yes it is odd -- but as I said it's not
specific to domains:
alvherre=# create table pg_class (a int, b text);
CREATE TABLE
alvherre=# \d
No se encontraron relaciones.
--
Álvaro Herrera http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
From | Date | Subject | |
---|---|---|---|
Next Message | Robert Haas | 2016-06-24 18:07:45 | Re: Rethinking behavior of force_parallel_mode = regress |
Previous Message | David G. Johnston | 2016-06-24 17:31:55 | Re: Odd behavior with domains |