-- -- first, define the datatype. Turn off echoing so that expected file -- does not depend on contents of seg.sql. -- \set ECHO none psql:tsearch.sql:11: NOTICE: ProcedureCreate: type txtidx is not yet defined psql:tsearch.sql:16: NOTICE: Argument type "txtidx" is only a shell psql:tsearch.sql:40: NOTICE: ProcedureCreate: type query_txt is not yet defined psql:tsearch.sql:45: NOTICE: Argument type "query_txt" is only a shell psql:tsearch.sql:57: NOTICE: ProcedureCreate: type mquery_txt is not yet defined psql:tsearch.sql:63: NOTICE: Argument type "mquery_txt" is only a shell psql:tsearch.sql:158: NOTICE: ProcedureCreate: type gtxtidx is not yet defined psql:tsearch.sql:163: NOTICE: Argument type "gtxtidx" is only a shell --txtidx SELECT '1'::txtidx; txtidx -------- '1' (1 row) SELECT '1 '::txtidx; txtidx -------- '1' (1 row) SELECT ' 1'::txtidx; txtidx -------- '1' (1 row) SELECT ' 1 '::txtidx; txtidx -------- '1' (1 row) SELECT '1 2'::txtidx; txtidx --------- '1' '2' (1 row) SELECT '\'1 2\''::txtidx; txtidx -------- '1 2' (1 row) SELECT '\'1 \\\'2\''::txtidx; txtidx --------- '1 \'2' (1 row) SELECT '\'1 \\\'2\'3'::txtidx; txtidx ------------- '3' '1 \'2' (1 row) SELECT '\'1 \\\'2\' 3'::txtidx; txtidx ------------- '3' '1 \'2' (1 row) SELECT '\'1 \\\'2\' \' 3\' 4 '::txtidx; txtidx ------------------ '4' ' 3' '1 \'2' (1 row) --query_txt SELECT '1'::query_txt; query_txt ----------- '1' (1 row) SELECT '1 '::query_txt; query_txt ----------- '1' (1 row) SELECT ' 1'::query_txt; query_txt ----------- '1' (1 row) SELECT ' 1 '::query_txt; query_txt ----------- '1' (1 row) SELECT '\'1 2\''::query_txt; query_txt ----------- '1 2' (1 row) SELECT '\'1 \\\'2\''::query_txt; query_txt ----------- '1 \'2' (1 row) SELECT '!1'::query_txt; query_txt ----------- !'1' (1 row) SELECT '1|2'::query_txt; query_txt ----------- '1' | '2' (1 row) SELECT '1|!2'::query_txt; query_txt ------------ '1' | !'2' (1 row) SELECT '!1|2'::query_txt; query_txt ------------ !'1' | '2' (1 row) SELECT '!1|!2'::query_txt; query_txt ------------- !'1' | !'2' (1 row) SELECT '!(!1|!2)'::query_txt; query_txt ------------------ !( !'1' | !'2' ) (1 row) SELECT '!(!1|2)'::query_txt; query_txt ----------------- !( !'1' | '2' ) (1 row) SELECT '!(1|!2)'::query_txt; query_txt ----------------- !( '1' | !'2' ) (1 row) SELECT '!(1|2)'::query_txt; query_txt ---------------- !( '1' | '2' ) (1 row) SELECT '1&2'::query_txt; query_txt ----------- '1' & '2' (1 row) SELECT '!1&2'::query_txt; query_txt ------------ !'1' & '2' (1 row) SELECT '1&!2'::query_txt; query_txt ------------ '1' & !'2' (1 row) SELECT '!1&!2'::query_txt; query_txt ------------- !'1' & !'2' (1 row) SELECT '(1&2)'::query_txt; query_txt ----------- '1' & '2' (1 row) SELECT '1&(2)'::query_txt; query_txt ----------- '1' & '2' (1 row) SELECT '!(1)&2'::query_txt; query_txt ------------ !'1' & '2' (1 row) SELECT '!(1&2)'::query_txt; query_txt ---------------- !( '1' & '2' ) (1 row) SELECT '1|2&3'::query_txt; query_txt ----------------- '1' | '2' & '3' (1 row) SELECT '1|(2&3)'::query_txt; query_txt ----------------- '1' | '2' & '3' (1 row) SELECT '(1|2)&3'::query_txt; query_txt --------------------- ( '1' | '2' ) & '3' (1 row) SELECT '1|2&!3'::query_txt; query_txt ------------------ '1' | '2' & !'3' (1 row) SELECT '1|!2&3'::query_txt; query_txt ------------------ '1' | !'2' & '3' (1 row) SELECT '!1|2&3'::query_txt; query_txt ------------------ !'1' | '2' & '3' (1 row) SELECT '!1|(2&3)'::query_txt; query_txt ------------------ !'1' | '2' & '3' (1 row) SELECT '!(1|2)&3'::query_txt; query_txt ---------------------- !( '1' | '2' ) & '3' (1 row) SELECT '(!1|2)&3'::query_txt; query_txt ---------------------- ( !'1' | '2' ) & '3' (1 row) SELECT '1|(2|(4|(5|6)))'::query_txt; query_txt ----------------------------------------- '1' | ( '2' | ( '4' | ( '5' | '6' ) ) ) (1 row) SELECT '1|2|4|5|6'::query_txt; query_txt ----------------------------------------- ( ( ( '1' | '2' ) | '4' ) | '5' ) | '6' (1 row) SELECT '1&(2&(4&(5&6)))'::query_txt; query_txt ----------------------------- '1' & '2' & '4' & '5' & '6' (1 row) SELECT '1&2&4&5&6'::query_txt; query_txt ----------------------------- '1' & '2' & '4' & '5' & '6' (1 row) SELECT '1&(2&(4&(5|6)))'::query_txt; query_txt --------------------------------- '1' & '2' & '4' & ( '5' | '6' ) (1 row) SELECT '1&(2&(4&(5|!6)))'::query_txt; query_txt ---------------------------------- '1' & '2' & '4' & ( '5' | !'6' ) (1 row) SELECT '1&(\'2\'&(\' 4\'&(\\|5 | \'6 \\\' !|&\')))'::query_txt; query_txt ------------------------------------------ '1' & '2' & ' 4' & ( '|5' | '6 \' !|&' ) (1 row) SELECT '1'::mquery_txt; mquery_txt ------------ '1' (1 row) SELECT '1 '::mquery_txt; mquery_txt ------------ '1' (1 row) SELECT ' 1'::mquery_txt; mquery_txt ------------ '1' (1 row) SELECT ' 1 '::mquery_txt; mquery_txt ------------ '1' (1 row) SELECT '\'1 2\''::mquery_txt; mquery_txt ------------ '1' & '2' (1 row) SELECT '\'1 \\\'2\''::mquery_txt; mquery_txt ------------ '1' & '2' (1 row) SELECT '!1'::mquery_txt; mquery_txt ------------ !'1' (1 row) SELECT '1|2'::mquery_txt; mquery_txt ------------ '1' | '2' (1 row) SELECT '1|!2'::mquery_txt; mquery_txt ------------ '1' | !'2' (1 row) SELECT '!1|2'::mquery_txt; mquery_txt ------------ !'1' | '2' (1 row) SELECT '!1|!2'::mquery_txt; mquery_txt ------------- !'1' | !'2' (1 row) SELECT '!(!1|!2)'::mquery_txt; mquery_txt ------------------ !( !'1' | !'2' ) (1 row) SELECT '!(!1|2)'::mquery_txt; mquery_txt ----------------- !( !'1' | '2' ) (1 row) SELECT '!(1|!2)'::mquery_txt; mquery_txt ----------------- !( '1' | !'2' ) (1 row) SELECT '!(1|2)'::mquery_txt; mquery_txt ---------------- !( '1' | '2' ) (1 row) SELECT '1&2'::mquery_txt; mquery_txt ------------ '1' & '2' (1 row) SELECT '!1&2'::mquery_txt; mquery_txt ------------ !'1' & '2' (1 row) SELECT '1&!2'::mquery_txt; mquery_txt ------------ '1' & !'2' (1 row) SELECT '!1&!2'::mquery_txt; mquery_txt ------------- !'1' & !'2' (1 row) SELECT '(1&2)'::mquery_txt; mquery_txt ------------ '1' & '2' (1 row) SELECT '1&(2)'::mquery_txt; mquery_txt ------------ '1' & '2' (1 row) SELECT '!(1)&2'::mquery_txt; mquery_txt ------------ !'1' & '2' (1 row) SELECT '!(1&2)'::mquery_txt; mquery_txt ---------------- !( '1' & '2' ) (1 row) SELECT '1|2&3'::mquery_txt; mquery_txt ----------------- '1' | '2' & '3' (1 row) SELECT '1|(2&3)'::mquery_txt; mquery_txt ----------------- '1' | '2' & '3' (1 row) SELECT '(1|2)&3'::mquery_txt; mquery_txt --------------------- ( '1' | '2' ) & '3' (1 row) SELECT '1|2&!3'::mquery_txt; mquery_txt ------------------ '1' | '2' & !'3' (1 row) SELECT '1|!2&3'::mquery_txt; mquery_txt ------------------ '1' | !'2' & '3' (1 row) SELECT '!1|2&3'::mquery_txt; mquery_txt ------------------ !'1' | '2' & '3' (1 row) SELECT '!1|(2&3)'::mquery_txt; mquery_txt ------------------ !'1' | '2' & '3' (1 row) SELECT '!(1|2)&3'::mquery_txt; mquery_txt ---------------------- !( '1' | '2' ) & '3' (1 row) SELECT '(!1|2)&3'::mquery_txt; mquery_txt ---------------------- ( !'1' | '2' ) & '3' (1 row) SELECT '1|(2|(4|(5|6)))'::mquery_txt; mquery_txt ----------------------------------------- '1' | ( '2' | ( '4' | ( '5' | '6' ) ) ) (1 row) SELECT '1|2|4|5|6'::mquery_txt; mquery_txt ----------------------------------------- ( ( ( '1' | '2' ) | '4' ) | '5' ) | '6' (1 row) SELECT '1&(2&(4&(5&6)))'::mquery_txt; mquery_txt ----------------------------- '1' & '2' & '4' & '5' & '6' (1 row) SELECT '1&2&4&5&6'::mquery_txt; mquery_txt ----------------------------- '1' & '2' & '4' & '5' & '6' (1 row) SELECT '1&(2&(4&(5|6)))'::mquery_txt; mquery_txt --------------------------------- '1' & '2' & '4' & ( '5' | '6' ) (1 row) SELECT '1&(2&(4&(5|!6)))'::mquery_txt; mquery_txt ---------------------------------- '1' & '2' & '4' & ( '5' | !'6' ) (1 row) SELECT '1&(\'2\'&(\' 4\'&(\\|5 | \'6 \\\' !|&\')))'::mquery_txt; mquery_txt --------------------------------- '1' & '2' & '4' & ( '5' | '6' ) (1 row) SELECT 'querty-fgries | http://www.google.com/index.html | www.rambler.ru/index.shtml'::mquery_txt; mquery_txt --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ( 'querty-fgri' & 'querti' & 'fgri' | 'www.google.com/index.html' & 'www.google.com' & '/index.html' ) | 'www.rambler.ru/index.shtml' & 'www.rambler.ru' & '/index.shtml' (1 row) CREATE TABLE test_txtidx( t text, a txtidx ); \copy test_txtidx from 'data/test_tsearch.data' SELECT count(*) FROM test_txtidx WHERE a @@ 'wr|qh'; count ------- 80 (1 row) SELECT count(*) FROM test_txtidx WHERE a @@ 'wr&qh'; count ------- 6 (1 row) SELECT count(*) FROM test_txtidx WHERE a @@ 'eq&yt'; count ------- 1 (1 row) SELECT count(*) FROM test_txtidx WHERE a @@ 'eq|yt'; count ------- 47 (1 row) SELECT count(*) FROM test_txtidx WHERE a @@ '(eq&yt)|(wr&qh)'; count ------- 7 (1 row) SELECT count(*) FROM test_txtidx WHERE a @@ '(eq|yt)&(wr|qh)'; count ------- 11 (1 row) SELECT count(*) FROM test_txtidx WHERE a ## 'wR|qh'; count ------- 80 (1 row) SELECT count(*) FROM test_txtidx WHERE a ## 'wR&qh'; count ------- 6 (1 row) SELECT count(*) FROM test_txtidx WHERE a ## 'eq&yt'; count ------- 1 (1 row) SELECT count(*) FROM test_txtidx WHERE a ## 'eq|yt'; count ------- 47 (1 row) SELECT count(*) FROM test_txtidx WHERE a ## '(eq&yt)|(wR&qh)'; count ------- 7 (1 row) SELECT count(*) FROM test_txtidx WHERE a ## '(eq|yt)&(wR|qh)'; count ------- 11 (1 row) create index wowidx on test_txtidx using gist (a); SELECT count(*) FROM test_txtidx WHERE a @@ 'wr|qh'; count ------- 80 (1 row) SELECT count(*) FROM test_txtidx WHERE a @@ 'wr&qh'; count ------- 6 (1 row) SELECT count(*) FROM test_txtidx WHERE a @@ 'eq&yt'; count ------- 1 (1 row) SELECT count(*) FROM test_txtidx WHERE a @@ 'eq|yt'; count ------- 47 (1 row) SELECT count(*) FROM test_txtidx WHERE a @@ '(eq&yt)|(wr&qh)'; count ------- 7 (1 row) SELECT count(*) FROM test_txtidx WHERE a @@ '(eq|yt)&(wr|qh)'; count ------- 11 (1 row) SELECT count(*) FROM test_txtidx WHERE a ## 'wR|qh'; count ------- 80 (1 row) SELECT count(*) FROM test_txtidx WHERE a ## 'wR&qh'; count ------- 6 (1 row) SELECT count(*) FROM test_txtidx WHERE a ## 'eq&yt'; count ------- 1 (1 row) SELECT count(*) FROM test_txtidx WHERE a ## 'eq|yt'; count ------- 47 (1 row) SELECT count(*) FROM test_txtidx WHERE a ## '(eq&yt)|(wR&qh)'; count ------- 7 (1 row) SELECT count(*) FROM test_txtidx WHERE a ## '(eq|yt)&(wR|qh)'; count ------- 11 (1 row) SELECT txt2txtidx('345 qwe@efd.r \' http://www.com/ http://aew.werc.ewr/?ad=qwe&dw 1aew.werc.ewr/?ad=qwe&dw 2aew.werc.ewr http://3aew.werc.ewr/?ad=qwe&dw http://4aew.werc.ewr http://5aew.werc.ewr:8100/? ad=qwe&dw 6aew.werc.ewr:8100/?ad=qwe&dw 7aew.werc.ewr:8100/?ad=qwe&dw=%20%32 +4.0e-10 qwe qwe qwqwe 234.435 455 5.005 teodor@stack.net qwe-wer asdf qwer jf sdjk ewr1> ewri2 /usr/local/fff /awdf/dwqe/4325 rewt/ewr wefjn /wqe-324/ewr gist.h gist.h.c gist.c. readline 4.2 4.2. 4.2, readline-4.2 readline-4.2. 234 wow < jqw <> qwerty'); txt2txtidx ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 'ad' 'dw' 'jf' '234' '345' '4.2' '455' 'jqw' 'qwe' 'wer' 'wow' 'asdf' 'ewr1' 'qwer' 'sdjk' '5.005' 'ewri2' 'qwqwe' 'wefjn' 'gist.c' 'gist.h' 'qwerti' '234.435' ':8100/?' 'qwe-wer' 'readlin' 'www.com' '+4.0e-10' 'gist.h.c' 'rewt/ewr' 'qwe@efd.r' 'readline-4' '/?ad=qwe&dw' '/wqe-324/ewr' 'aew.werc.ewr' '1aew.werc.ewr' '2aew.werc.ewr' '3aew.werc.ewr' '4aew.werc.ewr' '5aew.werc.ewr' '6aew.werc.ewr' '7aew.werc.ewr' '/usr/local/fff' '/awdf/dwqe/4325' ':8100/?ad=qwe&dw' 'teodor@stack.net' '5aew.werc.ewr:8100/?' ':8100/?ad=qwe&dw=%20%32' 'aew.werc.ewr/?ad=qwe&dw' '1aew.werc.ewr/?ad=qwe&dw' '3aew.werc.ewr/?ad=qwe&dw' '6aew.werc.ewr:8100/?ad=qwe&dw' '7aew.werc.ewr:8100/?ad=qwe&dw=%20%32' (1 row) SELECT txtidxsize(txt2txtidx('345 qw')); txtidxsize ------------ 2 (1 row) SELECT txtidxsize(txt2txtidx('345 qwe@efd.r \' http://www.com/ http://aew.werc.ewr/?ad=qwe&dw 1aew.werc.ewr/?ad=qwe&dw 2aew.werc.ewr http://3aew.werc.ewr/?ad=qwe&dw http://4aew.werc.ewr http://5aew.werc.ewr:8100/? ad=qwe&dw 6aew.werc.ewr:8100/?ad=qwe&dw 7aew.werc.ewr:8100/?ad=qwe&dw=%20%32 +4.0e-10 qwe qwe qwqwe 234.435 455 5.005 teodor@stack.net qwe-wer asdf qwer jf sdjk ewr1> ewri2 /usr/local/fff /awdf/dwqe/4325 rewt/ewr wefjn /wqe-324/ewr gist.h gist.h.c gist.c. readline 4.2 4.2. 4.2, readline-4.2 readline-4.2. 234 wow < jqw <> qwerty')); txtidxsize ------------ 53 (1 row) INSERT INTO test_txtidx (a) VALUES ('345 qwerty'); CREATE TRIGGER txtidxupdate BEFORE UPDATE OR INSERT ON test_txtidx FOR EACH ROW EXECUTE PROCEDURE tsearch(a, t); INSERT INTO test_txtidx (t) VALUES ('345 qwerty'); SELECT count(*) FROM test_txtidx WHERE a @@ '345&qwerty'; count ------- 1 (1 row) SELECT count(*) FROM test_txtidx WHERE a ## '345&qwerty'; count ------- 1 (1 row) UPDATE test_txtidx SET t = null WHERE t = '345 qwerty'; SELECT count(*) FROM test_txtidx WHERE a ## '345&qwerty'; count ------- 0 (1 row) SELECT count(*) FROM test_txtidx WHERE a @@ '345&qwerty'; count ------- 1 (1 row)