Обсуждение: Change from 9.6 to 11?

Поиск
Список
Период
Сортировка

Change from 9.6 to 11?

От
Chuck Martin
Дата:
I hope someone here can see something that eludes me. I've recently moved a database from PostgreSQL 9.6 to 11, and there are a few oddities. The following select statement returns zero rows when it should return one. This is one of a small number of records that exist, but are not returned by the query. When I include the main table, event, and any one of the associated tables, the record is returned, but no record is returned with the entire statement. All the primary keys (_pkey) and foreign keys (_fkey) are integers. The field I suspect as the possible culprit, event.InsBy, is a character column I'm converting to do a lookup on a primary key (integer): event.InsBy::int = usr.Usr_pkey. Maybe PG 11 doesn't recognize the same syntax for cast as PG 9.6? Or maybe I'm overlooking something else basic. Thanks for reading!

SELECT event.Event_pkey,ombcase.CaseName,status.StatusID,eventtype.EventTypeID,event.datetime AT TIME ZONE 'US/Eastern',event.endtime AT TIME ZONE 'US/Eastern',event.EventDeadline,eventtype.EventIsDeadline,eventtype.OnCalendar,event.EventConfirmed,event.Description,event.PrivateNote,primaryresp.PrimaryrespID,event.IsPrivate,event.Hours,event.EventDone,event.EventDoneDate,event.Importance,event.Urgency,event.InCourt,event.LeadTime,doc.DocID,doctype.DocTypeID,project.ProjectName,usr.UserID,eventtype.Hours,event.Active,event.EditNum,event.InsBy,event.InsDateTime,event.ModBy,event.ModDateTime,event.Case_fkey,event.Eventtype_fkey,event.Project_fkey,event.Doc_fkey,event.Primaryresp_fkey,project.Project_pkey,primaryresp.PrimaryrespHolidayGroup,primaryresp.Usr_pkey,backup.Usr_pkey,doctype.Doctype_pkey,primaryresp.Primaryrespbackup_fkey,ombcase.Status_fkey,event.Parentevent_fkey,event.EventPostRemand 
FROM event,ombcase,status,eventtype,primaryresp,doc,doctype,project,usr,backup 
WHERE event.Case_fkey = Case_pkey 
AND event.Eventtype_fkey = Eventtype_pkey 
AND event.Project_fkey = Project_pkey 
AND event.Primaryresp_fkey = primaryresp.Usr_pkey 
AND event.Doc_fkey = Doc_pkey 
AND Doctype_fkey = Doctype_pkey 
AND usr.Backup_fkey = backup.Usr_pkey 
AND ombcase.Status_fkey = status.Status_pkey 
AND event.InsBy::int = usr.Usr_pkey 
AND event.Event_pkey = 1060071 
ORDER BY EventDone, DateTime DESC

Chuck Martin
Avondale Software

Re: Change from 9.6 to 11?

От
legrand legrand
Дата:
Hello, this seems as if some data was missing on a joined table ...

could you compare the result of
EXPLAIN ANALYZE
for that statement
between both databases ?

and maybe share them ?

Regards
PAscal



--
Sent from: http://www.postgresql-archive.org/PostgreSQL-general-f1843780.html


Re: Change from 9.6 to 11?

От
Tom Lane
Дата:
Chuck Martin <clmartin@theombudsman.com> writes:
> I hope someone here can see something that eludes me. I've recently moved a
> database from PostgreSQL 9.6 to 11, and there are a few oddities. The
> following select statement returns zero rows when it should return one.
> This is one of a small number of records that exist, but are not returned
> by the query. When I include the main table, event, and any one of the
> associated tables, the record is returned, but no record is returned with
> the entire statement. All the primary keys (_pkey) and foreign keys (_fkey)
> are integers. The field I suspect as the possible culprit, event.InsBy, is
> a character column I'm converting to do a lookup on a primary key
> (integer): event.InsBy::int = usr.Usr_pkey. Maybe PG 11 doesn't recognize
> the same syntax for cast as PG 9.6? Or maybe I'm overlooking something else
> basic. Thanks for reading!

Maybe you've found a bug.  Can you extract a self-contained case
exhibiting this behavior?  Is this 11.0 or 11.1?

            regards, tom lane


Re: Change from 9.6 to 11?

От
Adrian Klaver
Дата:
On 12/20/18 12:35 PM, Chuck Martin wrote:
> I hope someone here can see something that eludes me. I've recently 
> moved a database from PostgreSQL 9.6 to 11, and there are a few 
> oddities. The following select statement returns zero rows when it 
> should return one. This is one of a small number of records that exist, 
> but are not returned by the query. When I include the main table, event, 
> and any one of the associated tables, the record is returned, but no 
> record is returned with the entire statement. All the primary keys 
> (_pkey) and foreign keys (_fkey) are integers. The field I suspect as 
> the possible culprit, event.InsBy, is a character column I'm converting 
> to do a lookup on a primary key (integer): event.InsBy::int = 
> usr.Usr_pkey. Maybe PG 11 doesn't recognize the same syntax for cast as 
> PG 9.6? Or maybe I'm overlooking something else basic. Thanks for reading!

So if in the WHERE you leave out the:

AND event.InsBy::int = usr.Usr_pkey

and in the SELECT you add:

event.InsBy, event.InsBy::int AS InsByInt

what do you see?



> 
> SELECT 
> event.Event_pkey,ombcase.CaseName,status.StatusID,eventtype.EventTypeID,event.datetime 
> AT TIME ZONE 'US/Eastern',event.endtime AT TIME ZONE 
>
'US/Eastern',event.EventDeadline,eventtype.EventIsDeadline,eventtype.OnCalendar,event.EventConfirmed,event.Description,event.PrivateNote,primaryresp.PrimaryrespID,event.IsPrivate,event.Hours,event.EventDone,event.EventDoneDate,event.Importance,event.Urgency,event.InCourt,event.LeadTime,doc.DocID,doctype.DocTypeID,project.ProjectName,usr.UserID,eventtype.Hours,event.Active,event.EditNum,event.InsBy,event.InsDateTime,event.ModBy,event.ModDateTime,event.Case_fkey,event.Eventtype_fkey,event.Project_fkey,event.Doc_fkey,event.Primaryresp_fkey,project.Project_pkey,primaryresp.PrimaryrespHolidayGroup,primaryresp.Usr_pkey,backup.Usr_pkey,doctype.Doctype_pkey,primaryresp.Primaryrespbackup_fkey,ombcase.Status_fkey,event.Parentevent_fkey,event.EventPostRemand

> 
> FROM 
> event,ombcase,status,eventtype,primaryresp,doc,doctype,project,usr,backup
> WHERE event.Case_fkey = Case_pkey
> AND event.Eventtype_fkey = Eventtype_pkey
> AND event.Project_fkey = Project_pkey
> AND event.Primaryresp_fkey = primaryresp.Usr_pkey
> AND event.Doc_fkey = Doc_pkey
> AND Doctype_fkey = Doctype_pkey
> AND usr.Backup_fkey = backup.Usr_pkey
> AND ombcase.Status_fkey = status.Status_pkey
> AND event.InsBy::int = usr.Usr_pkey
> AND event.Event_pkey = 1060071
> ORDER BY EventDone, DateTime DESC
> 
> Chuck Martin
> Avondale Software


-- 
Adrian Klaver
adrian.klaver@aklaver.com


Re: Change from 9.6 to 11?

От
Adrian Klaver
Дата:
On 12/20/18 5:51 PM, Chuck Martin wrote:

Please reply to list also.
Ccing list.

> 
> 
> On Thu, Dec 20, 2018 at 7:56 PM Adrian Klaver <adrian.klaver@aklaver.com 
> <mailto:adrian.klaver@aklaver.com>> wrote:
> 
>     On 12/20/18 12:35 PM, Chuck Martin wrote:
>      > I hope someone here can see something that eludes me. I've recently
>      > moved a database from PostgreSQL 9.6 to 11, and there are a few
>      > oddities. The following select statement returns zero rows when it
>      > should return one. This is one of a small number of records that
>     exist,
>      > but are not returned by the query. When I include the main table,
>     event,
>      > and any one of the associated tables, the record is returned, but no
>      > record is returned with the entire statement. All the primary keys
>      > (_pkey) and foreign keys (_fkey) are integers. The field I
>     suspect as
>      > the possible culprit, event.InsBy, is a character column I'm
>     converting
>      > to do a lookup on a primary key (integer): event.InsBy::int =
>      > usr.Usr_pkey. Maybe PG 11 doesn't recognize the same syntax for
>     cast as
>      > PG 9.6? Or maybe I'm overlooking something else basic. Thanks for
>     reading!
> 
>     So if in the WHERE you leave out the:
> 
>     AND event.InsBy::int = usr.Usr_pkey
> 
>     and in the SELECT you add:
> 
>     event.InsBy, event.InsBy::int AS InsByInt
> 
>     what do you see?
> 
> 
> I get 91 copies of the record. One for each record in the usr table.

But do the event.InsBy, event.InsBy::int AS InsByInt values match each 
other?

Just had a thought, what if you join just the event and usr tables on:

event.InsBy::int = usr.Usr_pkey

Trying to determine whether your suspected culprit really is the culprit.


-- 
Adrian Klaver
adrian.klaver@aklaver.com


Re: Change from 9.6 to 11?

От
Chuck Martin
Дата:
On Thu, Dec 20, 2018 at 10:12 PM Adrian Klaver <adrian.klaver@aklaver.com> wrote:
On 12/20/18 5:51 PM, Chuck Martin wrote:

Please reply to list also.
Ccing list.

>
>
> On Thu, Dec 20, 2018 at 7:56 PM Adrian Klaver <adrian.klaver@aklaver.com
> <mailto:adrian.klaver@aklaver.com>> wrote:
>
>     On 12/20/18 12:35 PM, Chuck Martin wrote:
>      > I hope someone here can see something that eludes me. I've recently
>      > moved a database from PostgreSQL 9.6 to 11, and there are a few
>      > oddities. The following select statement returns zero rows when it
>      > should return one. This is one of a small number of records that
>     exist,
>      > but are not returned by the query. When I include the main table,
>     event,
>      > and any one of the associated tables, the record is returned, but no
>      > record is returned with the entire statement. All the primary keys
>      > (_pkey) and foreign keys (_fkey) are integers. The field I
>     suspect as
>      > the possible culprit, event.InsBy, is a character column I'm
>     converting
>      > to do a lookup on a primary key (integer): event.InsBy::int =
>      > usr.Usr_pkey. Maybe PG 11 doesn't recognize the same syntax for
>     cast as
>      > PG 9.6? Or maybe I'm overlooking something else basic. Thanks for
>     reading!
>
>     So if in the WHERE you leave out the:
>
>     AND event.InsBy::int = usr.Usr_pkey
>
>     and in the SELECT you add:
>
>     event.InsBy, event.InsBy::int AS InsByInt
>
>     what do you see?
>
>
> I get 91 copies of the record. One for each record in the usr table.

But do the event.InsBy, event.InsBy::int AS InsByInt values match each
other?

Just had a thought, what if you join just the event and usr tables on:

event.InsBy::int = usr.Usr_pkey

Trying to determine whether your suspected culprit really is the culprit.

Thanks, Adrian. This led me to the problem. The data in InsBy was invalid. That is to say, a join wasn’t possible because no record exists with that primary key. Not sure how that occurred, but now I know why. Had I anticipated this might happen, I would have used an outer join. 

I appreciate your help solving this minor, but annoying, issue.



--
Adrian Klaver
adrian.klaver@aklaver.com

--
Chuck Martin
Avondale Software