Обсуждение: COMMENT ON INDEX silently fails
The statement COMMENT ON INDEX object_name IS '...' does not fail if object_name is a table constraint. However, it does not seem to have any effect. I think the statement should either fail or create the respective comment.
Michael Herold <quabla@hemio.de> writes: > The statement > COMMENT ON INDEX object_name IS '...' > does not fail if object_name is a table constraint. However, it does > not seem to have any effect. Sure it does. regression=# create table foo (f1 int primary key); CREATE TABLE regression=# \d foo Table "public.foo" Column | Type | Modifiers --------+---------+----------- f1 | integer | not null Indexes: "foo_pkey" PRIMARY KEY, btree (f1) regression=# select * from pg_description where objoid = 'foo_pkey'::regclass; objoid | classoid | objsubid | description --------+----------+----------+------------- (0 rows) regression=# comment on index foo_pkey is 'test comment'; COMMENT regression=# select * from pg_description where objoid = 'foo_pkey'::regclass; objoid | classoid | objsubid | description --------+----------+----------+-------------- 478892 | 1259 | 0 | test comment (1 row) I suspect you were expecting the comment to be displayed in some place it isn't, but that's hard to discuss intelligently when you didn't say where you expected it to show up. It is there in, eg, \di+ output: regression=# \di+ foo_pkey List of relations Schema | Name | Type | Owner | Table | Size | Description --------+----------+-------+----------+-------+------------+-------------- public | foo_pkey | index | postgres | foo | 8192 bytes | test comment (1 row) regards, tom lane
On Fri, Sep 30, 2016 at 08:49:01AM -0400, Tom Lane wrote: > Michael Herold <quabla@hemio.de> writes: > > The statement > > COMMENT ON INDEX object_name IS '...' > > does not fail if object_name is a table constraint. However, it does > > not seem to have any effect. > > Sure it does. > > regression=# create table foo (f1 int primary key); > CREATE TABLE > regression=# \d foo > Table "public.foo" > Column | Type | Modifiers > --------+---------+----------- > f1 | integer | not null > Indexes: > "foo_pkey" PRIMARY KEY, btree (f1) > > regression=# select * from pg_description where objoid = 'foo_pkey'::regclass; > objoid | classoid | objsubid | description > --------+----------+----------+------------- > (0 rows) > > regression=# comment on index foo_pkey is 'test comment'; > COMMENT > regression=# select * from pg_description where objoid = 'foo_pkey'::regclass; > objoid | classoid | objsubid | description > --------+----------+----------+-------------- > 478892 | 1259 | 0 | test comment > (1 row) > > I suspect you were expecting the comment to be displayed in some place it > isn't, but that's hard to discuss intelligently when you didn't say where > you expected it to show up. It is there in, eg, \di+ output: > > regression=# \di+ foo_pkey > List of relations > Schema | Name | Type | Owner | Table | Size | Description > --------+----------+-------+----------+-------+------------+-------------- > public | foo_pkey | index | postgres | foo | 8192 bytes | test comment > (1 row) It's not in the \df+ output, where a reasonable person could expect it to show up. Is this worth a patch for 10? Best, David. -- David Fetter <david(at)fetter(dot)org> http://fetter.org/ Phone: +1 415 235 3778 AIM: dfetter666 Yahoo!: dfetter Skype: davidfetter XMPP: david(dot)fetter(at)gmail(dot)com Remember to vote! Consider donating to Postgres: http://www.postgresql.org/about/donate
> Sure it does. Okay, correct phrasing would be: It has unexpected effects. > I suspect you were expecting the comment to be displayed in some > place it > isn't, but that's hard to discuss intelligently when you didn't say > where > you expected it to show up. create table foo (f1 int primary key); comment on index foo_pkey is 'test comment'; comment on constraint foo_pkey on foo is 'test comment 2'; # \di+ List of relations Schema | Name | Type | Owner | Table | Size | Description --------+----------+-------+----------+-------+------------+-------------- public | foo_pkey | index | postgres | foo | 8192 bytes | test comment (1 row) # SELECT * FROM pg_description WHERE description LIKE 'test com%'; objoid | classoid | objsubid | description --------+----------+----------+---------------- 123732 | 1259 | 0 | test comment 123733 | 2606 | 0 | test comment 2 (2 rows) $ pgAdmin III Before `comment on constraint` the textarea for comment is empty and no statement for comment in SQL pane. Afterwards it is using 'test comment 2'. Best, Michael
David Fetter <david@fetter.org> writes: > It's not in the \df+ output, where a reasonable person could expect it > to show up. Is this worth a patch for 10? Uh, what? This is an index we're talking about, not a function. regards, tom lane
Michael Herold <quabla@hemio.de> writes: >> I suspect you were expecting the comment to be displayed in some place >> it isn't, but that's hard to discuss intelligently when you didn't say >> where you expected it to show up. > $ pgAdmin III > Before `comment on constraint` the textarea for comment is empty and no > statement for comment in SQL pane. > Afterwards it is using 'test comment 2'. Well, you should take that up with the pgAdmin crew, but I'd note that a comment on a constraint and a comment on the index underlying the constraint are two different things. regards, tom lane
On Fri, Sep 30, 2016 at 9:36 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote: > Well, you should take that up with the pgAdmin crew, but I'd note that > a comment on a constraint and a comment on the index underlying the > constraint are two different things. Seems like pgAdmin is hiding this on purpose, which makes kind of sense. Seems like I missed "PostgreSQL automatically creates an index for each unique constraint and primary key constraint to enforce uniqueness." No Bugs here. Best, Michael