﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
28334	"contrib.postgresql overwhelms database with ""select from pg_type"" queries on each request"	Igor Gumenyuk		"On each newly created database connection `django.contrib.postgresql` tries to register hstore type for this connection via `connection_created` signal and `register_hstore` function.
 
https://github.com/django/django/blob/master/django/contrib/postgres/apps.py#L20
https://github.com/django/django/blob/stable/1.11.x/django/contrib/postgres/signals.py#L16

Behind the scenes `register_hstore` runs sql query to get `oid` of `hstore` type:
https://github.com/psycopg/psycopg2/blob/master/lib/extras.py#L885

This happens on every(!) request (unless persistent connections enabled)
    SELECT t.oid, %s
    FROM pg_type t JOIN pg_namespace ns
    ON typnamespace = ns.oid
    WHERE typname = 'hstore';

This is just huge overhead, since `register_hstore` accepts `oid` argument to avoid hitting database every call. 
We have seen significant latency spikes because of this.

Possible solution would be have configurable `GET_HSTORE_OID_FUNC` in `DATABASES->OPTIONS` setting which can be cached in any way.
This will also maintain backwards compatibility.

I can send patch for this if proposed solution is acceptable to be merged in master.
"	Cleanup/optimization	new	contrib.postgres	1.11	Normal				Unreviewed	0	0	0	0	0	0
