Re: [DOCS] Update docs for GIN index improvements

2015-10-05 Thread Bruce Momjian
On Sat, May 16, 2015 at 08:37:59AM -0400, Bruce Momjian wrote:
> We have made major improvements in GIN in the past few releases,
> particularly 9.4, but the full text search docs recommending when to use
> GIN and GiST indexes have not been updated.  This blog post empirically
> shows many of the improvements:
> 
>   
> http://blog.pgaddict.com/posts/performance-since-postgresql-7-4-to-9-4-fulltext
> 
> I would like to apply the attached patch to 9.5 to recommend GIN indexes
> for full text search, and remove mention of many old GIN limitations.

Done.

-- 
  Bruce Momjian  http://momjian.us
  EnterpriseDB http://enterprisedb.com

+ As you are, so once was I. As I am, so you will be. +
+ Roman grave inscription +


-- 
Sent via pgsql-docs mailing list (pgsql-docs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-docs


[DOCS] JSONB operator clarification

2015-10-05 Thread Bruce Momjian
In studying our JSONB operators, I was confused about what they do based
on the docs.  I found that "contain within" means "contain the
path/value", i.e. it has to match the path from the top level, not just
anywhere inside the document:

SELECT '{"a":1, "c" : {"b":2}}'::jsonb @> '{"a":1}'::jsonb;
 ?column?
--
 t

SELECT '{"a":1, "c" : {"b":2}}'::jsonb @> '{"b":2}'::jsonb;
 ?column?
--
 f

You can also specify only the top part of the path:

SELECT '{"a":1, "c" : {"b":2}}'::jsonb @> '{"c":{}}'::jsonb;
 ?column?
--
 t

SELECT '{"a":1, "c" : {"b":2}}'::jsonb @> '{"d":{}}'::jsonb;
 ?column?
--
 f

I also found that "key/element string exist" really means "string exist
as a top-level key", e.g.

SELECT '{"a":1, "c" : {"b":2}}'::jsonb ? 'a';
 ?column?
--
 t

SELECT '{"a":1, "c" : {"b":2}}'::jsonb ? 'b';
 ?column?
--
 f

The attached doc patch and SQL comment update improves this.

-- 
  Bruce Momjian  http://momjian.us
  EnterpriseDB http://enterprisedb.com

+ As you are, so once was I. As I am, so you will be. +
+ Roman grave inscription +
diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml
new file mode 100644
index 897ed64..4ddd01c
*** a/doc/src/sgml/func.sgml
--- b/doc/src/sgml/func.sgml
*** table2-mapping
*** 10331,10362 
 
  @>
  jsonb
! Does the left JSON value contain within it the right value?
  '{"a":1, "b":2}'::jsonb @> '{"b":2}'::jsonb
 
 
  <@
  jsonb
! Is the left JSON value contained within the right value?
  '{"b":2}'::jsonb <@ '{"a":1, "b":2}'::jsonb
 
 
  ?
  text
! Does the key/element string exist within
! the JSON value?
  '{"a":1, "b":2}'::jsonb ? 'b'
 
 
  ?|
  text[]
! Do any of these key/element strings exist?
  '{"a":1, "b":2, "c":3}'::jsonb ?| array['b', 'c']
 
 
  ?&
  text[]
! Do all of these key/element strings exist?
  '["a", "b"]'::jsonb ?& array['a', 'b']
 
 
--- 10331,10366 
 
  @>
  jsonb
! Does the left JSON value contain the right JSON
! path/value entries at the top level?
  '{"a":1, "b":2}'::jsonb @> '{"b":2}'::jsonb
 
 
  <@
  jsonb
! Are the left JSON path/value entries contained at the top level within
! the right JSON value?
  '{"b":2}'::jsonb <@ '{"a":1, "b":2}'::jsonb
 
 
  ?
  text
! Does the string exist as a top-level
! key within the JSON value?
  '{"a":1, "b":2}'::jsonb ? 'b'
 
 
  ?|
  text[]
! Do any of these array strings
! exist as top-level keys?
  '{"a":1, "b":2, "c":3}'::jsonb ?| array['b', 'c']
 
 
  ?&
  text[]
! Do all of these array strings exist
! as top-level keys?
  '["a", "b"]'::jsonb ?& array['a', 'b']
 
 
diff --git a/doc/src/sgml/json.sgml b/doc/src/sgml/json.sgml
new file mode 100644
index 1e78558..b4b390b
*** a/doc/src/sgml/json.sgml
--- b/doc/src/sgml/json.sgml
*** SELECT '"foo"'::jsonb ? 'foo';
*** 369,376 


  The default GIN operator class for jsonb supports queries with
! the @>, ?, ?&
! and ?| operators.
  (For details of the semantics that these operators
  implement, see .)
  An example of creating an index with this operator class is:
--- 369,377 


  The default GIN operator class for jsonb supports queries with
! top-level key-exists operators ?, ?&
! and ?| operators and path/value-exists operator
! @>.
  (For details of the semantics that these operators
  implement, see .)
  An example of creating an index with this operator class is:
diff --git a/src/include/catalog/pg_operator.h b/src/include/catalog/pg_operator.h
new file mode 100644
index 26c9d4e..eec9c60
*** a/src/include/catalog/pg_operator.h
--- b/src/include/catalog/pg_operator.h
*** DESCR("greater than or equal");
*** 1806,1816 
  DATA(insert OID = 3246 (  "@>"	   PGNSP PGUID b f f 3802 3802 16 3250 0 jsonb_contains contsel contjoinsel ));
  DESCR("contains");
  DATA(insert OID = 3247 (  "?"	   PGNSP PGUID b f f 3802 25 16 0 0 jsonb_exists contsel contjoinsel ));
! DESCR("exists");
  DATA(insert OID = 3248 (  "?|"	   PGNSP PGUID b f f 3802 1009 16 0 0 jsonb_exists_any contsel contjoinsel ));
! DESCR("exists any");
  DATA(insert OID = 3249 (  "?&"	   PGNSP PGUID b f f 3802 1009 16 0 0 

Re: [DOCS] Omission of "(or C)" in psql's "pset title" header

2015-10-05 Thread Bruce Momjian
On Wed, Aug 26, 2015 at 10:02:26PM -0400, Bruce Momjian wrote:
> On Wed, Jun 24, 2015 at 06:11:20PM -0400, David G. Johnston wrote:
> > http://www.postgresql.org/docs/devel/static/app-psql.html
> > 
> > The other pset keywords with black-slash aliases include a "(or )"
> > paren after the keyword.  "title" does not (should be "C")
> 
> Attached is a patch to implement this, including a doc patch.

Patch applied.

-- 
  Bruce Momjian  http://momjian.us
  EnterpriseDB http://enterprisedb.com

+ As you are, so once was I. As I am, so you will be. +
+ Roman grave inscription +


-- 
Sent via pgsql-docs mailing list (pgsql-docs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-docs