Change from 9.6 to 11?

Started by Chuck Martinover 7 years ago6 messagesgeneral
Jump to latest
#1Chuck Martin
clmartin@theombudsman.com

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

#2legrand legrand
legrand_legrand@hotmail.com
In reply to: Chuck Martin (#1)
Re: Change from 9.6 to 11?

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

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: Chuck Martin (#1)
Re: Change from 9.6 to 11?

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

#4Adrian Klaver
adrian.klaver@aklaver.com
In reply to: Chuck Martin (#1)
Re: Change from 9.6 to 11?

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

#5Adrian Klaver
adrian.klaver@aklaver.com
In reply to: Chuck Martin (#1)
Re: Change from 9.6 to 11?

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

#6Chuck Martin
clmartin@theombudsman.com
In reply to: Adrian Klaver (#5)
Re: Change from 9.6 to 11?

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