Обсуждение: fyi
previous table definition guess no not null of default ''
curreent table definitionCREATE TABLE apps
(
Id int not null unique, -- AppId
Sym varchar(8) not null default '', -- app symbol name
Nam varchar(30) not null default '', -- app full name
BitPriv varchar(10) not null default '', -- app bit priv
NamPriv varchar(255) not null default '', -- app nam priv
AppDir varchar(80) not null default '', -- app dir nam
AppPag varchar(32), -- app page nam
Aka int, -- ptr to real name
Uid int not null default 0, -- ptr to las mod user id
Dlm timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE apps
(
Id int not null unique, -- AppId
Sym varchar(8) not null default '', -- app symbol name
Nam varchar(30) not null default '', -- app full name
BitPriv varchar(10) not null default '', -- app bit priv
NamPriv varchar(255) not null default '', -- app nam priv
AppDir varchar(80) not null default '', -- app dir nam
AppPag varchar(32) not null default '', -- app page nam
Aka int, -- ptr to real name
Uid int not null default 0, -- ptr to las mod user id
Dlm timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
);
query on pqsql postgresql7-7.0.2.k62-8 redhat 7.2
select * from apps where (not (apppag = null or apppage = ''));
returns data not sure if current table actualy has not null default ''
on apppag field
but I know that was the reason for the query being as it was
query on pgsql postgresql 7.3.2-3 redhat 9.0 with new table definition
select * from apps where (not (apppag = null or apppag = ''))
returns nothing 0 rows
select * from apps where (not apppag = null);
returns nothing when it should return every thing
select * from apps where (not apppag = '');
returns data as expected
Lessons learned as programer always check database definitions only
check for what is possible. (not my style I like to write paranoid code)
(never trust the dba)
lessens learned as a dba always prevent as much illeagle, unwanted data
as possible. (I try when ever I get the enough time to spend on being a
dba)
and finialy the programer and the dba should talk often to optimize code
espesialy when there the same person.
Arno
On Thu, 31 Jul 2003, maillist wrote: > select * from apps where (not apppag = null); > returns nothing when it should return every thing No. It should return nothing. apppag = null returns unknown for every row. Use IS NULL to test if a value is null.
Stephan Szabo wrote:
>
> On Thu, 31 Jul 2003, maillist wrote:
>
> > select * from apps where (not apppag = null);
> > returns nothing when it should return every thing
>
> No. It should return nothing. apppag = null returns unknown for every
> row. Use IS NULL to test if a value is null.
hmmm now i'm confused when i set a value i don't use the phrase to null
and '= null' has always worked in the past, and if '= null' doesn't work
it should be an invalid query because i can see no other use for it, and
for the most part is, to are ignored anyways.
so would the correct query be
select * from apps where (not apppag = is null)
or
select * from apps where (not apppag is null)
both of these look silly, but I do use null in other fields on purpuse
to represent uninitailized fields. So I definitlay am going to have to
grep my code for "=*null" and check to see what needs to be done. Ijust
thought it was a bug, that should not have been found, because the query
had un needed checks. I need to do more testing before I allow
production servers to upgrade
Arno
On Fri, 1 Aug 2003, maillist wrote: > Stephan Szabo wrote: > > > > On Thu, 31 Jul 2003, maillist wrote: > > > > > select * from apps where (not apppag = null); > > > returns nothing when it should return every thing > > > > No. It should return nothing. apppag = null returns unknown for every > > row. Use IS NULL to test if a value is null. > hmmm now i'm confused when i set a value i don't use the phrase to null > and '= null' has always worked in the past, and if '= null' doesn't work > it should be an invalid query because i can see no other use for it, and > for the most part is, to are ignored anyways. Old versions converted an explicit token sequence like = NULL into IS NULL for you (due to broken clients). Newer versions have a compatibility GUC configuration option transform_null_equals which turns it on (which I usually forget about). However, the option should generally be discouraged because it is inconsistent (= NULL is converted, but comparing two variables where the second is NULL does not for example and not foo=null works but foo!=null doesn't). The change was made to better fit the SQL specification. As for =NULL in general, it's pretty meaningless but meets our syntactic constraints. > so would the correct query be > select * from apps where (not apppag = is null) > or > select * from apps where (not apppag is null) Actually since you're doing not, I'd suggest where (apppag is not null) > both of these look silly, but I do use null in other fields on purpuse > to represent uninitailized fields. So I definitlay am going to have to > grep my code for "=*null" and check to see what needs to be done. Ijust > thought it was a bug, that should not have been found, because the query > had un needed checks. I need to do more testing before I allow > production servers to upgrade You can turn on the option as a short term thing, although I'd suggest changing the queries in any case.