From: | Sergey Konoplev <sergey(dot)konoplev(at)postgresql-consulting(dot)com> |
---|---|
To: | pgsql-general <pgsql-general(at)postgresql(dot)org> |
Cc: | Maxim Boguk <maxim(dot)boguk(at)postgresql-consulting(dot)com> |
Subject: | Stored function signature incompatibility in index (probably a bug) |
Date: | 2012-06-28 16:22:37 |
Message-ID: | CAL_0b1s3u16QXVbaqOwuHe+A2k=PGk5wzmxPwODBmOtN9sQecA@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Hi,
When I was restoring a dump on 9.1.4 (created on 9.0.7) I got this error:
ERROR: function
imported_credentials_generalized_external_id(imported_email3) does not
exist
LINE 1: ...ed_external_i_idx ON imported_email3 USING btree (imported_c...
^
HINT: No function matches the given name and argument types. You
might need to add explicit type casts.
On this index creation statement:
CREATE INDEX imported_email3_imported_credentials_generalized_external_i_idx
ON imported_email3 USING btree
(imported_credentials_generalized_external_id(imported_email3.*));
Looking on the function and index in the original database I found a
very strange situation when the argument data type of the function
differs from the type of the argument in the function's signature in
the index.
mirtesen-0-3=# \df imported_credentials_generalized_external_id
List of functions
-[ RECORD 1 ]-------+---------------------------------------------
Schema | public
Name | imported_credentials_generalized_external_id
Result data type | text
Argument data types | i_row imported_email
Type | normal
mirtesen-0-3=# \d
imported_email3_imported_credentials_generalized_external_i_idx
Index
"public.imported_email3_imported_credentials_generalized_external_i_idx"
Column | Type |
Definition
----------------------------------------------+------+-----------------------------------------------------------------
imported_credentials_generalized_external_id | text |
imported_credentials_generalized_external_id(imported_email3.*)
btree, for table "public.imported_email3"
I managed to reproduce this issue by creating another table with LIKE.
mirtesen-0-3=# CREATE TABLE imported_email4 (LIKE imported_email3
INCLUDING ALL);
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index
"imported_email4_pkey" for table "imported_email4"
CREATE TABLE
And what I have found is that it just renamed the table name in the
function's signature in the index.
mirtesen-0-3=# \d
imported_email4_imported_credentials_generalized_external_i_idx
Index
"public.imported_email4_imported_credentials_generalized_external_i_idx"
Column | Type |
Definition
----------------------------------------------+------+-----------------------------------------------------------------
imported_credentials_generalized_external_id | text |
imported_credentials_generalized_external_id(imported_email4.*)
btree, for table "public.imported_email4"
I think it would be useful to do some checks here.
Thank you.
--
Sergey Konoplev
a database architect, software developer at PostgreSQL-Consulting.com
http://www.postgresql-consulting.com
Jabber: gray(dot)ru(at)gmail(dot)com Skype: gray-hemp Phone: +79160686204
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2012-06-28 16:59:00 | Re: Stored function signature incompatibility in index (probably a bug) |
Previous Message | Tom Lane | 2012-06-28 16:22:35 | Re: create database from template requires the source database to be unused |