Regexps and Indices.
Hi,
I'm sure that this has come up many times before but :
I have just upgraded from 7.0.2 to 7.2.2 using the latest Mandrake 9.0 RPMS.
The database structure is unchanged but I now find that the db refuses to use
the available index WHERE NAME ~ '^NAME' even with enable_seqscan set off. Am
I missing something ?
Table "t_patient"
Column | Type |
Modifiers
----------------------+-----------------------+---------------------------------------------------
prn | integer | not null default
nextval('patient_prn_seq'::text)
caseno | character(14) | not null
surname | character varying(20) | not null
forename | character varying(16) |
dob | date |
approx_date | boolean |
sex | character(1) |
hospital | character(4) |
ward | character(4) |
cons_type | character(1) |
cons_attr | character(4) |
consultant | text |
maiden_name | character varying(20) |
nhs_no | character varying(16) |
pat_address | text |
cardinal_blood_group | character varying(16) |
displist | character(8) |
Indexes: t_patient_caseno,
t_patient_mn_fn,
t_patient_surname_forename
Unique keys: t_patient_prn
pathology=# explain select * from t_patient where surname ~ '^SMIT';
NOTICE: QUERY PLAN:
Seq Scan on t_patient (cost=100000000.00..100000440.89 rows=64 width=245)
EXPLAIN
pathology=# set enable_seqscan to off;
SET VARIABLE
pathology=# explain select * from t_patient where surname ~ '^SMIT';
NOTICE: QUERY PLAN:
Seq Scan on t_patient (cost=100000000.00..100000440.89 rows=64 width=245)
EXPLAIN
It's probaly because you only have 64 rows.
If you have more, you need to rerun vacuum analyze;
Jon
On Tue, 22 Apr 2003, Brian Piatkus wrote:
Show quoted text
Hi,
I'm sure that this has come up many times before but :I have just upgraded from 7.0.2 to 7.2.2 using the latest Mandrake 9.0 RPMS.
The database structure is unchanged but I now find that the db refuses to use
the available index WHERE NAME ~ '^NAME' even with enable_seqscan set off. Am
I missing something ?Table "t_patient"
Column | Type |
Modifiers
----------------------+-----------------------+---------------------------------------------------
prn | integer | not null default
nextval('patient_prn_seq'::text)
caseno | character(14) | not null
surname | character varying(20) | not null
forename | character varying(16) |
dob | date |
approx_date | boolean |
sex | character(1) |
hospital | character(4) |
ward | character(4) |
cons_type | character(1) |
cons_attr | character(4) |
consultant | text |
maiden_name | character varying(20) |
nhs_no | character varying(16) |
pat_address | text |
cardinal_blood_group | character varying(16) |
displist | character(8) |Indexes: t_patient_caseno,
t_patient_mn_fn,
t_patient_surname_forename
Unique keys: t_patient_prnpathology=# explain select * from t_patient where surname ~ '^SMIT';
NOTICE: QUERY PLAN:Seq Scan on t_patient (cost=100000000.00..100000440.89 rows=64 width=245)
EXPLAIN
pathology=# set enable_seqscan to off;
SET VARIABLE
pathology=# explain select * from t_patient where surname ~ '^SMIT';
NOTICE: QUERY PLAN:Seq Scan on t_patient (cost=100000000.00..100000440.89 rows=64 width=245)
EXPLAIN
---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
(send "unregister YourEmailAddressHere" to majordomo@postgresql.org)
On Tue, 22 Apr 2003, Brian Piatkus wrote:
Hi,
I'm sure that this has come up many times before but :I have just upgraded from 7.0.2 to 7.2.2 using the latest Mandrake 9.0 RPMS.
The database structure is unchanged but I now find that the db refuses to use
the available index WHERE NAME ~ '^NAME' even with enable_seqscan set off. Am
I missing something ?
It's possible that you initialized the database in something other than
"C" locale which disables the optimization that uses indexes for
regexp/like (see past discussions in the archives for details).
Hi
It turns out to be more than possible. Locale is set by default to en_GB.
Am I right in assuming that I need only to set LANG=C ? and should I also do
this for the environment of the running postmaster ?
Show quoted text
On Tuesday 22 Apr 2003 20:59, you wrote:
On Tue, 22 Apr 2003, Brian Piatkus wrote:
Hi,
I'm sure that this has come up many times before but :I have just upgraded from 7.0.2 to 7.2.2 using the latest Mandrake 9.0
RPMS. The database structure is unchanged but I now find that the db
refuses to use the available index WHERE NAME ~ '^NAME' even with
enable_seqscan set off. Am I missing something ?It's possible that you initialized the database in something other than
"C" locale which disables the optimization that uses indexes for
regexp/like (see past discussions in the archives for details).---------------------------(end of broadcast)---------------------------
TIP 4: Don't 'kill -9' the postmaster
Brian Piatkus <Brian@fulcrum.plus.com> writes:
It turns out to be more than possible. Locale is set by default to en_GB.
Am I right in assuming that I need only to set LANG=C ? and should I also do
this for the environment of the running postmaster ?
You need to re-do initdb with LANG=C in its environment. Pain in the
neck, I know.
regards, tom lane
BTW, What **IS** the the language 'C'? I don't talk to people like:
'if( !happy(honey)){
what_went_wrong_today();
}'
;-)
Brian Piatkus wrote:
Show quoted text
Hi
It turns out to be more than possible. Locale is set by default to en_GB.
Am I right in assuming that I need only to set LANG=C ? and should I also do
this for the environment of the running postmaster ?On Tuesday 22 Apr 2003 20:59, you wrote:
On Tue, 22 Apr 2003, Brian Piatkus wrote:
Hi,
I'm sure that this has come up many times before but :I have just upgraded from 7.0.2 to 7.2.2 using the latest Mandrake 9.0
RPMS. The database structure is unchanged but I now find that the db
refuses to use the available index WHERE NAME ~ '^NAME' even with
enable_seqscan set off. Am I missing something ?It's possible that you initialized the database in something other than
"C" locale which disables the optimization that uses indexes for
regexp/like (see past discussions in the archives for details).---------------------------(end of broadcast)---------------------------
TIP 4: Don't 'kill -9' the postmaster---------------------------(end of broadcast)---------------------------
TIP 4: Don't 'kill -9' the postmaster
Tom,
I'm really impressed with the way people chip in with answers & actually help
solve the problem too !
I've done a lot of browsing the archives & a bit of testing with my sample
db. I cant get LANG=C to work but LC_ALL=C does so I'm a bit confused. Still,
if it works and ain't broke .....
Thanks for the helpful tips.
Regards
Show quoted text
On Wednesday 23 Apr 2003 15:16, you wrote:
Brian Piatkus <Brian@fulcrum.plus.com> writes:
It turns out to be more than possible. Locale is set by default to en_GB.
Am I right in assuming that I need only to set LANG=C ? and should I also
do this for the environment of the running postmaster ?You need to re-do initdb with LANG=C in its environment. Pain in the
neck, I know.regards, tom lane