Stored function signature incompatibility in index (probably a bug)

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

Responses

Browse pgsql-general by date

  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