Create a template loader for SQL templates.
This will automatically find the correct version of a template for the server version, and allows us to remove templates that were previously duplicated for different server versions. Patch by George & Tira at Pivotal. Review by me and Murtuza from EDB. Discussion: https://www.postgresql.org/message-id/flat/CAHowoHaU9_pkCt%2B1g8dpY3hsXXZmsJZiJH-3-_Hd%2BC1MxiGhtA%40mail.gmail.com#CAHowoHaU9_pkCt+1g8dpY3hsXXZmsJZiJH-3-_Hd+C1MxiGhtA@mail.gmail.compull/3/head
parent
42d3121369
commit
19be3529f8
|
@ -21,7 +21,10 @@ from flask_login import user_logged_in
|
|||
from flask_security import Security, SQLAlchemyUserDatastore
|
||||
from flask_mail import Mail
|
||||
from flask_security.utils import login_user
|
||||
from werkzeug.datastructures import ImmutableDict
|
||||
|
||||
from pgadmin.utils import PgAdminModule, driver
|
||||
from pgadmin.utils.versioned_template_loader import VersionedTemplateLoader
|
||||
from pgadmin.utils.session import create_session_interface
|
||||
from werkzeug.local import LocalProxy
|
||||
from werkzeug.utils import find_modules
|
||||
|
@ -40,7 +43,16 @@ if sys.version_info[0] >= 3:
|
|||
elif os.name == 'nt':
|
||||
import _winreg as winreg
|
||||
|
||||
|
||||
class PgAdmin(Flask):
|
||||
def __init__(self, *args, **kwargs):
|
||||
# Set the template loader to a postgres-version-aware loader
|
||||
self.jinja_options = ImmutableDict(
|
||||
extensions=['jinja2.ext.autoescape', 'jinja2.ext.with_'],
|
||||
loader=VersionedTemplateLoader(self)
|
||||
)
|
||||
super(PgAdmin, self).__init__(*args, **kwargs)
|
||||
|
||||
def find_submodules(self, basemodule):
|
||||
for module_name in find_modules(basemodule, True):
|
||||
if module_name in self.config['MODULE_BLACKLIST']:
|
||||
|
|
|
@ -656,16 +656,6 @@ class ServerNode(PGChildNodeView):
|
|||
def modified_sql(self, gid, sid):
|
||||
return make_json_response(data='')
|
||||
|
||||
def get_template_directory(self, version):
|
||||
""" This function will check and return template directory
|
||||
based on postgres verion"""
|
||||
if version >= 90600:
|
||||
return '9.6_plus'
|
||||
elif version >= 90200:
|
||||
return '9.2_plus'
|
||||
else:
|
||||
return '9.1_plus'
|
||||
|
||||
def statistics(self, gid, sid):
|
||||
manager = get_driver(PG_DEFAULT_DRIVER).connection_manager(sid)
|
||||
conn = manager.connection()
|
||||
|
@ -673,11 +663,7 @@ class ServerNode(PGChildNodeView):
|
|||
if conn.connected():
|
||||
status, res = conn.execute_dict(
|
||||
render_template(
|
||||
"/".join([
|
||||
'servers/sql',
|
||||
self.get_template_directory(manager.version),
|
||||
'stats.sql'
|
||||
]),
|
||||
"/servers/sql/#{0}#/stats.sql".format(manager.version),
|
||||
conn=conn, _=gettext
|
||||
)
|
||||
)
|
||||
|
@ -1051,11 +1037,8 @@ class ServerNode(PGChildNodeView):
|
|||
# Hash new password before saving it.
|
||||
password = pqencryptpassword(data['newPassword'], manager.user)
|
||||
|
||||
SQL = render_template("/".join([
|
||||
'servers/sql',
|
||||
self.get_template_directory(manager.version),
|
||||
'change_password.sql'
|
||||
]),
|
||||
SQL = render_template(
|
||||
"/servers/sql/#{0}#/change_password.sql".format(manager.version),
|
||||
conn=conn, _=gettext,
|
||||
user=manager.user, encrypted_password=password)
|
||||
|
||||
|
|
|
@ -137,14 +137,8 @@ class DatabaseView(PGChildNodeView):
|
|||
else:
|
||||
self.conn = self.manager.connection()
|
||||
|
||||
ver = self.manager.version
|
||||
# we will set template path for sql scripts
|
||||
if ver >= 90300:
|
||||
self.template_path = 'databases/sql/9.3_plus'
|
||||
elif ver >= 90200:
|
||||
self.template_path = 'databases/sql/9.2_plus'
|
||||
else:
|
||||
self.template_path = 'databases/sql/9.1_plus'
|
||||
# set template path for sql scripts
|
||||
self.template_path = 'databases/sql/#{0}#'.format(self.manager.version)
|
||||
|
||||
return f(self, *args, **kwargs)
|
||||
|
||||
|
|
|
@ -212,10 +212,7 @@ class ForeignDataWrapperView(PGChildNodeView):
|
|||
self.conn = self.manager.connection(did=kwargs['did'])
|
||||
|
||||
# Set the template path for the SQL scripts
|
||||
if self.manager.version >= 90300:
|
||||
self.template_path = 'foreign_data_wrappers/sql/9.3_plus'
|
||||
else:
|
||||
self.template_path = 'foreign_data_wrappers/sql/9.1_plus'
|
||||
self.template_path = 'foreign_data_wrappers/sql/#{0}#'.format(self.manager.version)
|
||||
|
||||
return f(*args, **kwargs)
|
||||
|
||||
|
|
|
@ -205,10 +205,7 @@ class ForeignServerView(PGChildNodeView):
|
|||
self.manager = get_driver(PG_DEFAULT_DRIVER).connection_manager(kwargs['sid'])
|
||||
self.conn = self.manager.connection(did=kwargs['did'])
|
||||
# Set the template path for the SQL scripts
|
||||
if self.manager.version >= 90300:
|
||||
self.template_path = 'foreign_servers/sql/9.3_plus'
|
||||
else:
|
||||
self.template_path = 'foreign_servers/sql/9.1_plus'
|
||||
self.template_path = "foreign_servers/sql/#{0}#".format(self.manager.version)
|
||||
|
||||
return f(*args, **kwargs)
|
||||
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
{# ============= Give foreign server name from foreign server id ============= #}
|
||||
{% if fsid %}
|
||||
SELECT srvname as name FROM pg_foreign_server srv LEFT OUTER JOIN pg_foreign_data_wrapper fdw on fdw.oid=srvfdw
|
||||
WHERE srv.oid={{fsid}}::oid;
|
||||
{% endif %}
|
||||
{# ============= Delete/Drop cascade foreign server ============= #}
|
||||
{% if name %}
|
||||
DROP SERVER {{ conn|qtIdent(name) }} {% if cascade %} CASCADE {% endif %};
|
||||
{% endif %}
|
|
@ -1,12 +0,0 @@
|
|||
{# ============= Get dependents of foreign server ============= #}
|
||||
{% if fsid %}
|
||||
WITH umapData AS
|
||||
(
|
||||
SELECT u.oid AS um_oid, CASE WHEN u.umuser = 0::oid THEN 'PUBLIC'::name ELSE a.rolname END AS name,
|
||||
array_to_string(u.umoptions, ',') AS umoptions FROM pg_user_mapping u
|
||||
LEFT JOIN pg_authid a ON a.oid = u.umuser WHERE u.umserver = {{ fsid }}::OID
|
||||
)
|
||||
|
||||
SELECT um.um_oid, name, dep.deptype FROM umapData um
|
||||
LEFT JOIN pg_depend dep ON dep.objid=um.um_oid
|
||||
{% endif %}
|
|
@ -1,87 +0,0 @@
|
|||
{% import 'macros/privilege.macros' as PRIVILEGE %}
|
||||
{% if data %}
|
||||
{# ============= Update foreign server name ============= #}
|
||||
{% if data.name != o_data.name %}
|
||||
ALTER SERVER {{ conn|qtIdent(o_data.name) }}
|
||||
RENAME TO {{ conn|qtIdent(data.name) }};
|
||||
|
||||
{% endif %}
|
||||
{# ============= Update foreign server owner ============= #}
|
||||
{% if data.fsrvowner and data.fsrvowner != o_data.fsrvowner %}
|
||||
ALTER SERVER {{ conn|qtIdent(data.name) }}
|
||||
OWNER TO {{ conn|qtIdent(data.fsrvowner) }};
|
||||
|
||||
{% endif %}
|
||||
{# ============= Update foreign server version ============= #}
|
||||
{% if data.fsrvversion and data.fsrvversion != o_data.fsrvversion %}
|
||||
ALTER SERVER {{ conn|qtIdent(data.name) }}
|
||||
VERSION {{ data.fsrvversion|qtLiteral }};
|
||||
|
||||
{% endif %}
|
||||
{# ============= Update foreign server comments ============= #}
|
||||
{% if data.description is defined and data.description != o_data.description %}
|
||||
COMMENT ON SERVER {{ conn|qtIdent(data.name) }}
|
||||
IS {{ data.description|qtLiteral }};
|
||||
|
||||
{% endif %}
|
||||
{# ============= Update foreign server options and values ============= #}
|
||||
{% if data.fsrvoptions and data.fsrvoptions.deleted %}
|
||||
{% set addAlter = "False" %}
|
||||
{% for variable in data.fsrvoptions.deleted %}
|
||||
{% if variable.fsrvoption and variable.fsrvoption != '' %}
|
||||
{% if addAlter == "False" %}
|
||||
ALTER SERVER {{ conn|qtIdent(data.name) }}
|
||||
OPTIONS ({% set addAlter = "True" %}{%endif%}
|
||||
DROP {{conn|qtIdent(variable.fsrvoption)}}{% if not loop.last %},{% else %});{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
|
||||
{% endif %}
|
||||
{% if data.fsrvoptions and data.fsrvoptions.added %}
|
||||
{% set addAlter = "False" %}
|
||||
{% for variable in data.fsrvoptions.added %}
|
||||
{% if variable.fsrvoption and variable.fsrvoption != '' %}
|
||||
{% if addAlter == "False" %}
|
||||
ALTER SERVER {{ conn|qtIdent(data.name) }}
|
||||
OPTIONS ({% set addAlter = "True" %}{%endif%}
|
||||
ADD {{ conn|qtIdent(variable.fsrvoption) }} {{variable.fsrvvalue|qtLiteral}}{% if not loop.last %},{% else %});{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
|
||||
{% endif %}
|
||||
{% if data.fsrvoptions and data.fsrvoptions.changed %}
|
||||
{% set addAlter = "False" %}
|
||||
{% for variable in data.fsrvoptions.changed %}
|
||||
{% if variable.fsrvoption and variable.fsrvoption != '' %}
|
||||
{% if addAlter == "False" %}
|
||||
ALTER SERVER {{ conn|qtIdent(data.name) }}
|
||||
OPTIONS ({% set addAlter = "True" %}{%endif%}
|
||||
SET {{conn|qtIdent(variable.fsrvoption)}} {{variable.fsrvvalue|qtLiteral}}{% if not loop.last %},{% else %});{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
|
||||
{% endif %}
|
||||
{# Change the privileges #}
|
||||
{% if data.fsrvacl %}
|
||||
{% if 'deleted' in data.fsrvacl %}
|
||||
{% for priv in data.fsrvacl.deleted %}
|
||||
{{ PRIVILEGE.RESETALL(conn, 'FOREIGN SERVER', priv.grantee, data.name) }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if 'changed' in data.fsrvacl %}
|
||||
{% for priv in data.fsrvacl.changed %}
|
||||
{{ PRIVILEGE.RESETALL(conn, 'FOREIGN SERVER', priv.grantee, data.name) }}
|
||||
{{ PRIVILEGE.APPLY(conn, 'FOREIGN SERVER', priv.grantee, data.name, priv.without_grant, priv.with_grant) }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if 'added' in data.fsrvacl %}
|
||||
{% for priv in data.fsrvacl.added %}
|
||||
{{ PRIVILEGE.APPLY(conn, 'FOREIGN SERVER', priv.grantee, data.name, priv.without_grant, priv.with_grant) }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% endif %}
|
|
@ -1,8 +0,0 @@
|
|||
{# ============= Get foreign data wrapper from fid ============= #}
|
||||
{% if fid %}
|
||||
SELECT fdwname as name from pg_foreign_data_wrapper WHERE oid={{fid}}::oid;
|
||||
{% endif %}
|
||||
{# ============= Delete/Drop cascade foreign data wrapper ============= #}
|
||||
{% if name %}
|
||||
DROP FOREIGN DATA WRAPPER {{ conn|qtIdent(name) }} {% if cascade %} CASCADE {% endif %};
|
||||
{% endif %}
|
|
@ -1,5 +0,0 @@
|
|||
{# ============= Get the handlers of foreign data wrapper ============= #}
|
||||
SELECT nspname, proname as fdwhan,
|
||||
quote_ident(nspname)||'.'||quote_ident(proname) AS schema_prefix_fdw_hand
|
||||
FROM pg_proc p JOIN pg_namespace nsp ON nsp.oid=pronamespace
|
||||
WHERE pronargs=0 AND prorettype=3115;
|
|
@ -1,5 +0,0 @@
|
|||
{# ============= Get the validators of foreign data wrapper ============= #}
|
||||
SELECT nspname, proname as fdwvalue,
|
||||
quote_ident(nspname)||'.'||quote_ident(proname) AS schema_prefix_fdw_val
|
||||
FROM pg_proc p JOIN pg_namespace nsp ON nsp.oid=pronamespace
|
||||
WHERE proargtypes[0]=1009 AND proargtypes[1]=26;
|
|
@ -230,10 +230,7 @@ class LanguageView(PGChildNodeView):
|
|||
self.manager = self.driver.connection_manager(kwargs['sid'])
|
||||
self.conn = self.manager.connection(did=kwargs['did'])
|
||||
# Set the template path for the SQL scripts
|
||||
if self.manager.version >= 90300:
|
||||
self.template_path = 'languages/sql/9.3_plus'
|
||||
else:
|
||||
self.template_path = 'languages/sql/9.1_plus'
|
||||
self.template_path = "languages/sql/#{0}#".format(self.manager.version)
|
||||
|
||||
return f(*args, **kwargs)
|
||||
|
||||
|
|
|
@ -1,39 +0,0 @@
|
|||
{# ============= CREATE LANGUAGE Query ============= #}
|
||||
{% import 'macros/privilege.macros' as PRIVILEGE %}
|
||||
{% import 'macros/security.macros' as SECLABEL %}
|
||||
{% if data.is_template %}
|
||||
CREATE LANGUAGE {{ conn|qtIdent(data.name) }};
|
||||
{% else %}
|
||||
CREATE{% if data.trusted %} TRUSTED{% endif %} PROCEDURAL LANGUAGE {{ conn|qtIdent(data.name) }}
|
||||
{% if data.lanproc %}
|
||||
HANDLER {{ conn|qtIdent(data.lanproc) }}
|
||||
{% endif %}
|
||||
{% if data.laninl %}
|
||||
INLINE {{ conn|qtIdent(data.laninl) }}
|
||||
{% endif %}
|
||||
{% if data.lanval %}
|
||||
VALIDATOR {{ conn|qtIdent(data.lanval) }}
|
||||
{% endif %};
|
||||
{% endif %}
|
||||
{# ============= Set the owner for language ============= #}
|
||||
{% if data.lanowner %}
|
||||
ALTER LANGUAGE {{ conn|qtIdent(data.name) }}
|
||||
OWNER TO {{ conn|qtIdent(data.lanowner) }};
|
||||
{% endif %}
|
||||
{# ============= Comment on of language object ============= #}
|
||||
{% if data.description %}
|
||||
COMMENT ON LANGUAGE {{ conn|qtIdent(data.name) }}
|
||||
IS {{ data.description|qtLiteral }};
|
||||
{% endif %}
|
||||
{# ============= Create ACL for language ============= #}
|
||||
{% if data.lanacl %}
|
||||
{% for priv in data.lanacl %}
|
||||
{{ PRIVILEGE.APPLY(conn, 'LANGUAGE', priv.grantee, data.name, priv.without_grant, priv.with_grant) }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{# ========= Change the security labels ========== #}
|
||||
{% if data.seclabels %}
|
||||
{% for r in data.seclabels %}
|
||||
{{ SECLABEL.APPLY(conn, 'LANGUAGE', data.name, r.provider, r.label) }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
|
@ -1,8 +0,0 @@
|
|||
{# ============= Get the language name using oid ============= #}
|
||||
{% if lid %}
|
||||
SELECT lanname FROM pg_language WHERE oid = {{lid}}::oid;
|
||||
{% endif %}
|
||||
{# ============= Drop the language ============= #}
|
||||
{% if lname %}
|
||||
DROP LANGUAGE {{ conn|qtIdent(lname) }} {% if cascade %}CASCADE{% endif%};
|
||||
{% endif %}
|
|
@ -1,15 +0,0 @@
|
|||
SELECT
|
||||
CASE WHEN nspname != 'pg_catalog' THEN quote_ident(nspname) || '.' || quote_ident(proname)
|
||||
ELSE quote_ident(proname)
|
||||
END AS label,
|
||||
CASE
|
||||
WHEN prorettype = 2280 THEN 'handler'
|
||||
WHEN proargtypes[0] = 2281 THEN 'inline'
|
||||
ELSE 'validator'
|
||||
END AS prop_type
|
||||
FROM
|
||||
pg_proc p JOIN pg_namespace nsp ON nsp.oid=pronamespace
|
||||
WHERE
|
||||
prorettype=2280 OR
|
||||
(prorettype=2278 AND proargtypes[0]=26) OR
|
||||
(prorettype=2278 AND proargtypes[0]=2281)
|
|
@ -1,23 +0,0 @@
|
|||
SELECT
|
||||
lan.oid as oid, lanname as name, lanpltrusted as trusted,
|
||||
array_to_string(lanacl::text[], ', ') as acl, hp.proname as lanproc,
|
||||
vp.proname as lanval, description,
|
||||
pg_get_userbyid(lan.lanowner) as lanowner, ip.proname as laninl,
|
||||
(SELECT array_agg(provider || '=' || label) FROM pg_seclabel sl1 WHERE sl1.objoid=lan.oid) AS seclabels
|
||||
FROM
|
||||
pg_language lan JOIN pg_proc hp ON hp.oid=lanplcallfoid
|
||||
LEFT OUTER JOIN pg_proc ip ON ip.oid=laninline
|
||||
LEFT OUTER JOIN pg_proc vp ON vp.oid=lanvalidator
|
||||
LEFT OUTER JOIN pg_description des
|
||||
ON (
|
||||
des.objoid=lan.oid AND des.objsubid=0 AND
|
||||
des.classoid='pg_language'::regclass
|
||||
)
|
||||
WHERE lanispl IS TRUE
|
||||
{% if lid %} AND
|
||||
lan.oid={{lid}}::oid
|
||||
{% endif %}
|
||||
{% if lanname %} AND
|
||||
lanname={{ lanname|qtLiteral }}::text
|
||||
{% endif %}
|
||||
ORDER BY lanname
|
|
@ -1,7 +0,0 @@
|
|||
{# ============= SELECT Language templates ============= #}
|
||||
SELECT
|
||||
tmplname
|
||||
FROM pg_pltemplate
|
||||
LEFT JOIN pg_language ON tmplname=lanname
|
||||
WHERE lanname IS NULL
|
||||
ORDER BY tmplname;
|
|
@ -1,62 +0,0 @@
|
|||
{% import 'macros/privilege.macros' as PRIVILEGE %}
|
||||
{% import 'macros/security.macros' as SECLABEL %}
|
||||
{% if data %}
|
||||
{# ============= Update language name ============= #}
|
||||
{% if data.name != o_data.name %}
|
||||
ALTER LANGUAGE {{ conn|qtIdent(o_data.name) }}
|
||||
RENAME TO {{ conn|qtIdent(data.name) }};
|
||||
{% endif %}
|
||||
{# ============= Update language user ============= #}
|
||||
{% if data.lanowner and data.lanowner != o_data.lanowner %}
|
||||
ALTER LANGUAGE {{ conn|qtIdent(data.name) }}
|
||||
OWNER TO {{ conn|qtIdent(data.lanowner) }};
|
||||
{% endif %}
|
||||
{# ============= Update language comments ============= #}
|
||||
{% if data.description is defined and data.description != o_data.description %}
|
||||
COMMENT ON LANGUAGE {{ conn|qtIdent(data.name) }}
|
||||
IS '{{ data.description }}';
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{# Change the privileges #}
|
||||
{% if data.lanacl %}
|
||||
{% if 'deleted' in data.lanacl %}
|
||||
{% for priv in data.lanacl.deleted %}
|
||||
{{ PRIVILEGE.RESETALL(conn, 'LANGUAGE', priv.grantee, data.name) }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if 'changed' in data.lanacl %}
|
||||
{% for priv in data.lanacl.changed %}
|
||||
{{ PRIVILEGE.RESETALL(conn, 'LANGUAGE', priv.grantee, data.name) }}
|
||||
{{ PRIVILEGE.APPLY(conn, 'LANGUAGE', priv.grantee, data.name, priv.without_grant, priv.with_grant) }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if 'added' in data.lanacl %}
|
||||
{% for priv in data.lanacl.added %}
|
||||
{{ PRIVILEGE.APPLY(conn, 'LANGUAGE', priv.grantee, data.name, priv.without_grant, priv.with_grant) }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% if data.seclabels and
|
||||
data.seclabels|length > 0
|
||||
%}{% set seclabels = data.seclabels %}
|
||||
{% if 'deleted' in seclabels and seclabels.deleted|length > 0 %}
|
||||
|
||||
{% for r in seclabels.deleted %}
|
||||
{{ SECLABEL.DROP(conn, 'PROCEDURAL LANGUAGE', data.name, r.provider) }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if 'added' in seclabels and seclabels.added|length > 0 %}
|
||||
|
||||
{% for r in seclabels.added %}
|
||||
{{ SECLABEL.APPLY(conn, 'PROCEDURAL LANGUAGE', data.name, r.provider, r.label) }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
|
||||
|
||||
{% for r in seclabels.changed %}
|
||||
{{ SECLABEL.APPLY(conn, 'PROCEDURAL LANGUAGE', data.name, r.provider, r.label) }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% endif %}
|
|
@ -238,18 +238,14 @@ class SchemaView(PGChildNodeView):
|
|||
"""
|
||||
Returns the template path for PPAS servers.
|
||||
"""
|
||||
if ver >= 90200:
|
||||
return 'ppas/9.2_plus'
|
||||
return 'ppas/9.1_plus'
|
||||
return 'ppas/#{0}#'.format(ver)
|
||||
|
||||
@staticmethod
|
||||
def pg_template_path(ver):
|
||||
"""
|
||||
Returns the template path for PostgreSQL servers.
|
||||
"""
|
||||
if ver >= 90200:
|
||||
return 'pg/9.2_plus'
|
||||
return 'pg/9.1_plus'
|
||||
return 'pg/#{0}#'.format(ver)
|
||||
|
||||
def format_request_acls(self, data, modified=False, specific=None):
|
||||
acls = {}
|
||||
|
|
|
@ -263,10 +263,7 @@ class DomainView(PGChildNodeView, DataTypeReader):
|
|||
self.qtIdent = driver.qtIdent
|
||||
|
||||
# we will set template path for sql scripts
|
||||
if self.manager.version >= 90200:
|
||||
self.template_path = 'domains/sql/9.2_plus'
|
||||
else:
|
||||
self.template_path = 'domains/sql/9.1_plus'
|
||||
self.template_path = 'domains/sql/#{0}#'.format(self.manager.version)
|
||||
|
||||
return f(*args, **kwargs)
|
||||
|
||||
|
|
|
@ -257,10 +257,7 @@ class DomainConstraintView(PGChildNodeView):
|
|||
self.qtIdent = driver.qtIdent
|
||||
|
||||
# Set the template path for the SQL scripts
|
||||
if self.manager.version >= 90200:
|
||||
self.template_path = 'domain_constraints/sql/9.2_plus'
|
||||
else:
|
||||
self.template_path = 'domain_constraints/sql/9.1_plus'
|
||||
self.template_path = 'domain_constraints/sql/#{0}#'.format(self.manager.version)
|
||||
|
||||
return f(*args, **kwargs)
|
||||
return wrap
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
{% if data %}
|
||||
ALTER DOMAIN {{ conn|qtIdent(data.nspname, data.relname) }}
|
||||
DROP CONSTRAINT {{ conn|qtIdent(data.name) }};
|
||||
{% endif %}
|
|
@ -1,8 +0,0 @@
|
|||
SELECT
|
||||
d.typname as domain, bn.nspname as schema
|
||||
FROM
|
||||
pg_type d
|
||||
JOIN
|
||||
pg_namespace bn ON bn.oid=d.typnamespace
|
||||
WHERE
|
||||
d.oid = {{doid}};
|
|
@ -1,7 +0,0 @@
|
|||
SELECT
|
||||
oid, conname as name
|
||||
FROM
|
||||
pg_constraint
|
||||
WHERE
|
||||
contypid = {{doid}}::oid
|
||||
AND conname={{ name|qtLiteral }};
|
|
@ -1,16 +0,0 @@
|
|||
{% if scid and doid %}
|
||||
SELECT
|
||||
d.typname as name, bn.nspname as basensp
|
||||
FROM
|
||||
pg_type d
|
||||
JOIN
|
||||
pg_namespace bn ON bn.oid=d.typnamespace
|
||||
WHERE
|
||||
d.typnamespace = {{scid}}::oid
|
||||
AND
|
||||
d.oid={{doid}}::oid;
|
||||
{% endif %}
|
||||
|
||||
{% if name %}
|
||||
DROP DOMAIN {{ conn|qtIdent(basensp, name) }}{% if cascade %} CASCADE{% endif %};
|
||||
{% endif %}
|
|
@ -1,18 +0,0 @@
|
|||
{% if doid %}
|
||||
SELECT
|
||||
d.typnamespace as scid
|
||||
FROM
|
||||
pg_type d
|
||||
WHERE
|
||||
d.oid={{ doid }}::oid;
|
||||
{% else %}
|
||||
SELECT
|
||||
d.oid
|
||||
FROM
|
||||
pg_type d
|
||||
JOIN
|
||||
pg_namespace bn ON bn.oid=d.typnamespace
|
||||
WHERE
|
||||
bn.nspname = {{ basensp|qtLiteral }}
|
||||
AND d.typname={{ name|qtLiteral }};
|
||||
{% endif %}
|
|
@ -339,16 +339,9 @@ class ForeignTableView(PGChildNodeView, DataTypeReader):
|
|||
self.conn = self.manager.connection(did=kwargs['did'])
|
||||
self.qtIdent = driver.qtIdent
|
||||
|
||||
ver = self.manager.version
|
||||
# Set template path for sql scripts depending
|
||||
# on the server version.
|
||||
|
||||
if ver >= 90500:
|
||||
self.template_path = 'foreign_tables/sql/9.5_plus'
|
||||
elif ver >= 90200:
|
||||
self.template_path = 'foreign_tables/sql/9.2_plus'
|
||||
else:
|
||||
self.template_path = 'foreign_tables/sql/9.1_plus'
|
||||
self.template_path = 'foreign_tables/sql/#{0}#'.format(self.manager.version)
|
||||
|
||||
return f(*args, **kwargs)
|
||||
return wrap
|
||||
|
|
|
@ -1,19 +0,0 @@
|
|||
{% if basensp %}
|
||||
SELECT
|
||||
c.oid, bn.oid as scid
|
||||
FROM
|
||||
pg_class c
|
||||
JOIN
|
||||
pg_namespace bn ON bn.oid=c.relnamespace
|
||||
WHERE
|
||||
bn.nspname = {{ basensp|qtLiteral }}
|
||||
AND c.relname={{ name|qtLiteral }};
|
||||
|
||||
{% elif foid %}
|
||||
SELECT
|
||||
c.relnamespace as scid
|
||||
FROM
|
||||
pg_class c
|
||||
WHERE
|
||||
c.oid = {{foid}}::oid;
|
||||
{% endif %}
|
|
@ -1,18 +0,0 @@
|
|||
SELECT
|
||||
c.oid, c.relname AS name, pg_get_userbyid(relowner) AS owner,
|
||||
ftoptions, nspname as basensp, description
|
||||
FROM
|
||||
pg_class c
|
||||
JOIN
|
||||
pg_foreign_table ft ON c.oid=ft.ftrelid
|
||||
LEFT OUTER JOIN
|
||||
pg_namespace nsp ON (nsp.oid=c.relnamespace)
|
||||
LEFT OUTER JOIN
|
||||
pg_description des ON (des.objoid=c.oid AND des.classoid='pg_class'::regclass)
|
||||
WHERE
|
||||
{% if scid %}
|
||||
c.relnamespace = {{scid}}::oid
|
||||
{% elif foid %}
|
||||
c.oid = {{foid}}::oid
|
||||
{% endif %}
|
||||
ORDER BY c.relname;
|
|
@ -1,14 +0,0 @@
|
|||
{% import 'foreign_tables/sql/macros/db_catalogs.macro' as CATALOG %}
|
||||
typisdefined AND typtype IN ('b', 'c', 'd', 'e', 'r')
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM pg_class
|
||||
WHERE relnamespace=typnamespace
|
||||
AND relname = typname AND relkind != 'c')
|
||||
AND (typname NOT LIKE '_%' OR NOT EXISTS (
|
||||
SELECT 1 FROM pg_class
|
||||
WHERE relnamespace=typnamespace
|
||||
AND relname = substring(typname FROM 2)::name
|
||||
AND relkind != 'c'))
|
||||
{% if not show_system_objects %}
|
||||
{{ CATALOG.VALID_TYPE_CATALOGS(server_type) }}
|
||||
{% endif %}
|
|
@ -1,35 +0,0 @@
|
|||
SELECT
|
||||
COALESCE(gt.rolname, 'PUBLIC') AS grantee,
|
||||
g.rolname AS grantor, array_agg(privilege_type) AS privileges,
|
||||
array_agg(is_grantable) AS grantable
|
||||
FROM
|
||||
(SELECT
|
||||
d.grantee, d.grantor, d.is_grantable,
|
||||
CASE d.privilege_type
|
||||
WHEN 'CONNECT' THEN 'c'
|
||||
WHEN 'CREATE' THEN 'C'
|
||||
WHEN 'DELETE' THEN 'd'
|
||||
WHEN 'EXECUTE' THEN 'X'
|
||||
WHEN 'INSERT' THEN 'a'
|
||||
WHEN 'REFERENCES' THEN 'x'
|
||||
WHEN 'SELECT' THEN 'r'
|
||||
WHEN 'TEMPORARY' THEN 'T'
|
||||
WHEN 'TRIGGER' THEN 't'
|
||||
WHEN 'TRUNCATE' THEN 'D'
|
||||
WHEN 'UPDATE' THEN 'w'
|
||||
WHEN 'USAGE' THEN 'U'
|
||||
ELSE 'UNKNOWN'
|
||||
END AS privilege_type
|
||||
FROM
|
||||
(SELECT
|
||||
(d).grantee AS grantee, (d).grantor AS grantor,
|
||||
(d).is_grantable AS is_grantable,
|
||||
(d).privilege_type AS privilege_type
|
||||
FROM
|
||||
(SELECT aclexplode(db.relacl) AS d FROM pg_class db
|
||||
WHERE db.oid = {{foid}}::OID) a
|
||||
) d
|
||||
) d
|
||||
LEFT JOIN pg_catalog.pg_roles g ON (d.grantor = g.oid)
|
||||
LEFT JOIN pg_catalog.pg_roles gt ON (d.grantee = gt.oid)
|
||||
GROUP BY g.rolname, gt.rolname;
|
|
@ -1,17 +0,0 @@
|
|||
{% if scid and foid %}
|
||||
SELECT
|
||||
c.relname AS name, nspname as basensp
|
||||
FROM
|
||||
pg_class c
|
||||
LEFT OUTER JOIN
|
||||
pg_namespace nsp ON (nsp.oid=c.relnamespace)
|
||||
WHERE
|
||||
c.relnamespace = {{scid}}::oid
|
||||
AND
|
||||
c.oid = {{foid}}::oid;
|
||||
{% endif %}
|
||||
|
||||
|
||||
{% if name %}
|
||||
DROP FOREIGN TABLE {{ conn|qtIdent(basensp, name) }}{% if cascade%} CASCADE{% endif %};
|
||||
{% endif %}
|
|
@ -1,9 +0,0 @@
|
|||
SELECT --nspname, collname,
|
||||
CASE WHEN length(nspname) > 0 AND length(collname) > 0 THEN
|
||||
concat(nspname, '."', collname,'"')
|
||||
ELSE '' END AS copy_collation
|
||||
FROM
|
||||
pg_collation c, pg_namespace n
|
||||
WHERE
|
||||
c.collnamespace=n.oid
|
||||
ORDER BY nspname, collname;
|
|
@ -1,19 +0,0 @@
|
|||
{% if basensp %}
|
||||
SELECT
|
||||
c.oid, bn.oid as scid
|
||||
FROM
|
||||
pg_class c
|
||||
JOIN
|
||||
pg_namespace bn ON bn.oid=c.relnamespace
|
||||
WHERE
|
||||
bn.nspname = {{ basensp|qtLiteral }}
|
||||
AND c.relname={{ name|qtLiteral }};
|
||||
|
||||
{% elif foid %}
|
||||
SELECT
|
||||
c.relnamespace as scid
|
||||
FROM
|
||||
pg_class c
|
||||
WHERE
|
||||
c.oid = {{foid}}::oid;
|
||||
{% endif %}
|
|
@ -1,18 +0,0 @@
|
|||
SELECT
|
||||
c.oid, c.relname AS name, pg_get_userbyid(relowner) AS owner,
|
||||
ftoptions, nspname as basensp, description
|
||||
FROM
|
||||
pg_class c
|
||||
JOIN
|
||||
pg_foreign_table ft ON c.oid=ft.ftrelid
|
||||
LEFT OUTER JOIN
|
||||
pg_namespace nsp ON (nsp.oid=c.relnamespace)
|
||||
LEFT OUTER JOIN
|
||||
pg_description des ON (des.objoid=c.oid AND des.classoid='pg_class'::regclass)
|
||||
WHERE
|
||||
{% if scid %}
|
||||
c.relnamespace = {{scid}}::oid
|
||||
{% elif foid %}
|
||||
c.oid = {{foid}}::oid
|
||||
{% endif %}
|
||||
ORDER BY c.relname;
|
|
@ -1,14 +0,0 @@
|
|||
{% import 'foreign_tables/sql/macros/db_catalogs.macro' as CATALOG %}
|
||||
typisdefined AND typtype IN ('b', 'c', 'd', 'e', 'r')
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM pg_class
|
||||
WHERE relnamespace=typnamespace
|
||||
AND relname = typname AND relkind != 'c')
|
||||
AND (typname NOT LIKE '_%' OR NOT EXISTS (
|
||||
SELECT 1 FROM pg_class
|
||||
WHERE relnamespace=typnamespace
|
||||
AND relname = substring(typname FROM 2)::name
|
||||
AND relkind != 'c'))
|
||||
{% if not show_system_objects %}
|
||||
{{ CATALOG.VALID_TYPE_CATALOGS(server_type) }}
|
||||
{% endif %}
|
|
@ -327,8 +327,6 @@ class FunctionView(PGChildNodeView, DataTypeReader):
|
|||
self.qtIdent = driver.qtIdent
|
||||
self.qtLiteral = driver.qtLiteral
|
||||
|
||||
ver = self.manager.version
|
||||
|
||||
# Set the template path for the SQL scripts
|
||||
self.template_path = "/".join([
|
||||
self.node_type
|
||||
|
@ -337,10 +335,8 @@ class FunctionView(PGChildNodeView, DataTypeReader):
|
|||
self.template_path,
|
||||
self.manager.server_type,
|
||||
'sql',
|
||||
'9.5_plus' if ver >= 90500 else
|
||||
'9.2_plus' if ver >= 90200 else
|
||||
'9.1_plus'
|
||||
])
|
||||
'#{0}#'
|
||||
]).format(self.manager.version)
|
||||
|
||||
return f(*args, **kwargs)
|
||||
|
||||
|
|
|
@ -1,35 +0,0 @@
|
|||
SELECT
|
||||
COALESCE(gt.rolname, 'PUBLIC') AS grantee,
|
||||
g.rolname AS grantor, array_agg(privilege_type) AS privileges,
|
||||
array_agg(is_grantable) AS grantable
|
||||
FROM
|
||||
(SELECT
|
||||
d.grantee, d.grantor, d.is_grantable,
|
||||
CASE d.privilege_type
|
||||
WHEN 'CONNECT' THEN 'c'
|
||||
WHEN 'CREATE' THEN 'C'
|
||||
WHEN 'DELETE' THEN 'd'
|
||||
WHEN 'EXECUTE' THEN 'X'
|
||||
WHEN 'INSERT' THEN 'a'
|
||||
WHEN 'REFERENCES' THEN 'x'
|
||||
WHEN 'SELECT' THEN 'r'
|
||||
WHEN 'TEMPORARY' THEN 'T'
|
||||
WHEN 'TRIGGER' THEN 't'
|
||||
WHEN 'TRUNCATE' THEN 'D'
|
||||
WHEN 'UPDATE' THEN 'w'
|
||||
WHEN 'USAGE' THEN 'U'
|
||||
ELSE 'UNKNOWN'
|
||||
END AS privilege_type
|
||||
FROM
|
||||
(SELECT
|
||||
(d).grantee AS grantee, (d).grantor AS grantor,
|
||||
(d).is_grantable AS is_grantable,
|
||||
(d).privilege_type AS privilege_type
|
||||
FROM
|
||||
(SELECT aclexplode(db.proacl) AS d FROM pg_proc db
|
||||
WHERE db.oid = {{fnid}}::OID) a
|
||||
) d
|
||||
) d
|
||||
LEFT JOIN pg_catalog.pg_roles g ON (d.grantor = g.oid)
|
||||
LEFT JOIN pg_catalog.pg_roles gt ON (d.grantee = gt.oid)
|
||||
GROUP BY g.rolname, gt.rolname;
|
|
@ -1,20 +0,0 @@
|
|||
SELECT
|
||||
funcname AS {{ conn|qtIdent(_('Name')) }},
|
||||
calls AS {{ conn|qtIdent(_('Number of calls')) }},
|
||||
total_time AS {{ conn|qtIdent(_('Total time')) }},
|
||||
self_time AS {{ conn|qtIdent(_('Self time')) }}
|
||||
FROM
|
||||
pg_stat_user_functions
|
||||
WHERE
|
||||
schemaname = {{schema_name|qtLiteral}}
|
||||
AND funcid IN (
|
||||
SELECT p.oid
|
||||
FROM
|
||||
pg_proc p
|
||||
JOIN
|
||||
pg_type typ ON typ.oid=p.prorettype
|
||||
WHERE
|
||||
p.proisagg = FALSE
|
||||
AND typname NOT IN ('trigger', 'event_trigger')
|
||||
)
|
||||
ORDER BY funcname;
|
|
@ -1,21 +0,0 @@
|
|||
{% if scid and fnid %}
|
||||
SELECT
|
||||
pr.proname as name, '(' || COALESCE(pg_catalog
|
||||
.pg_get_function_identity_arguments(pr.oid), '') || ')' as func_args,
|
||||
nspname
|
||||
FROM
|
||||
pg_proc pr
|
||||
JOIN
|
||||
pg_type typ ON typ.oid=prorettype
|
||||
JOIN
|
||||
pg_namespace nsp ON nsp.oid=pr.pronamespace
|
||||
WHERE
|
||||
proisagg = FALSE
|
||||
AND pronamespace = {{scid}}::oid
|
||||
AND typname NOT IN ('trigger', 'event_trigger')
|
||||
AND pr.oid = {{fnid}};
|
||||
{% endif %}
|
||||
|
||||
{% if name %}
|
||||
DROP FUNCTION {{ conn|qtIdent(nspname, name) }}{{func_args}}{% if cascade %} CASCADE{% endif %};
|
||||
{% endif %}
|
|
@ -1,12 +0,0 @@
|
|||
SELECT
|
||||
pg_get_functiondef({{fnid}}::oid) AS func_def,
|
||||
nspname || '.' || pr.proname || '(' || COALESCE(pg_catalog.pg_get_function_identity_arguments(pr.oid), '') || ')' as name,
|
||||
nspname || '.' || pr.proname || '(' || COALESCE(pg_catalog.pg_get_function_arguments(pr.oid), '') || ')' as name_with_default_args
|
||||
FROM
|
||||
pg_proc pr
|
||||
JOIN
|
||||
pg_namespace nsp ON nsp.oid=pr.pronamespace
|
||||
WHERE
|
||||
proisagg = FALSE
|
||||
AND pronamespace = {{scid}}::oid
|
||||
AND pr.oid = {{fnid}}::oid;
|
|
@ -1,4 +0,0 @@
|
|||
SELECT
|
||||
lanname as label, lanname as value
|
||||
FROM
|
||||
pg_language;
|
|
@ -1,17 +0,0 @@
|
|||
SELECT
|
||||
pr.oid, pr.proname || '(' || COALESCE(pg_catalog
|
||||
.pg_get_function_identity_arguments(pr.oid), '') || ')' as name,
|
||||
lanname, pg_get_userbyid(proowner) as funcowner, pr.pronamespace as nsp
|
||||
FROM
|
||||
pg_proc pr
|
||||
JOIN
|
||||
pg_type typ ON typ.oid=prorettype
|
||||
JOIN
|
||||
pg_language lng ON lng.oid=prolang
|
||||
JOIN
|
||||
pg_namespace nsp ON nsp.oid=pr.pronamespace
|
||||
AND nsp.nspname={{ nspname|qtLiteral }}
|
||||
WHERE
|
||||
proisagg = FALSE
|
||||
AND typname NOT IN ('trigger', 'event_trigger')
|
||||
AND pr.proname = {{ name|qtLiteral }};
|
|
@ -1,6 +0,0 @@
|
|||
SELECT
|
||||
format_type(oid, NULL) AS out_arg_type
|
||||
FROM
|
||||
pg_type
|
||||
WHERE
|
||||
oid = {{ out_arg_oid }}::oid;
|
|
@ -1,6 +0,0 @@
|
|||
SELECT
|
||||
nspname
|
||||
FROM
|
||||
pg_namespace
|
||||
WHERE
|
||||
oid = {{ scid }}::oid;
|
|
@ -1,20 +0,0 @@
|
|||
SELECT
|
||||
*
|
||||
FROM
|
||||
(SELECT
|
||||
format_type(t.oid,NULL) AS typname,
|
||||
CASE WHEN typelem > 0 THEN typelem ELSE t.oid END as elemoid, typlen, typtype, t.oid, nspname,
|
||||
(SELECT COUNT(1) FROM pg_type t2 WHERE t2.typname = t.typname) > 1 AS isdup
|
||||
FROM
|
||||
pg_type t
|
||||
JOIN
|
||||
pg_namespace nsp ON typnamespace=nsp.oid
|
||||
WHERE
|
||||
(NOT (typname = 'unknown' AND nspname = 'pg_catalog'))
|
||||
AND
|
||||
(
|
||||
typtype IN ('b', 'c', 'd', 'e', 'p', 'r')
|
||||
AND typname NOT IN ('any', 'trigger', 'language_handler', 'event_trigger')
|
||||
)
|
||||
) AS dummy
|
||||
ORDER BY nspname <> 'pg_catalog', nspname <> 'public', nspname, 1;
|
|
@ -1,22 +0,0 @@
|
|||
SELECT
|
||||
pr.oid, pr.proname || '(' || COALESCE(pg_catalog.pg_get_function_identity_arguments(pr.oid), '') || ')' as name,
|
||||
lanname, pg_get_userbyid(proowner) as funcowner, description
|
||||
FROM
|
||||
pg_proc pr
|
||||
JOIN
|
||||
pg_type typ ON typ.oid=prorettype
|
||||
JOIN
|
||||
pg_language lng ON lng.oid=prolang
|
||||
LEFT OUTER JOIN
|
||||
pg_description des ON (des.objoid=pr.oid AND des.classoid='pg_proc'::regclass)
|
||||
WHERE
|
||||
proisagg = FALSE
|
||||
{% if fnid %}
|
||||
AND pr.oid = {{ fnid|qtLiteral }}
|
||||
{% endif %}
|
||||
{% if scid %}
|
||||
AND pronamespace = {{scid}}::oid
|
||||
{% endif %}
|
||||
AND typname NOT IN ('trigger', 'event_trigger')
|
||||
ORDER BY
|
||||
proname;
|
|
@ -1,8 +0,0 @@
|
|||
SELECT
|
||||
calls AS {{ conn|qtIdent(_('Number of calls')) }},
|
||||
total_time AS {{ conn|qtIdent(_('Total time')) }},
|
||||
self_time AS {{ conn|qtIdent(_('Self time')) }}
|
||||
FROM
|
||||
pg_stat_user_functions
|
||||
WHERE
|
||||
funcid = {{fnid}}::OID
|
|
@ -1,6 +0,0 @@
|
|||
SELECT
|
||||
name, vartype, min_val, max_val, enumvals
|
||||
FROM
|
||||
pg_settings
|
||||
WHERE
|
||||
context in ('user', 'superuser');
|
|
@ -1,35 +0,0 @@
|
|||
SELECT
|
||||
COALESCE(gt.rolname, 'PUBLIC') AS grantee,
|
||||
g.rolname AS grantor, array_agg(privilege_type) AS privileges,
|
||||
array_agg(is_grantable) AS grantable
|
||||
FROM
|
||||
(SELECT
|
||||
d.grantee, d.grantor, d.is_grantable,
|
||||
CASE d.privilege_type
|
||||
WHEN 'CONNECT' THEN 'c'
|
||||
WHEN 'CREATE' THEN 'C'
|
||||
WHEN 'DELETE' THEN 'd'
|
||||
WHEN 'EXECUTE' THEN 'X'
|
||||
WHEN 'INSERT' THEN 'a'
|
||||
WHEN 'REFERENCES' THEN 'x'
|
||||
WHEN 'SELECT' THEN 'r'
|
||||
WHEN 'TEMPORARY' THEN 'T'
|
||||
WHEN 'TRIGGER' THEN 't'
|
||||
WHEN 'TRUNCATE' THEN 'D'
|
||||
WHEN 'UPDATE' THEN 'w'
|
||||
WHEN 'USAGE' THEN 'U'
|
||||
ELSE 'UNKNOWN'
|
||||
END AS privilege_type
|
||||
FROM
|
||||
(SELECT
|
||||
(d).grantee AS grantee, (d).grantor AS grantor,
|
||||
(d).is_grantable AS is_grantable,
|
||||
(d).privilege_type AS privilege_type
|
||||
FROM
|
||||
(SELECT aclexplode(db.proacl) AS d FROM pg_proc db
|
||||
WHERE db.oid = {{fnid}}::OID) a
|
||||
) d
|
||||
) d
|
||||
LEFT JOIN pg_catalog.pg_roles g ON (d.grantor = g.oid)
|
||||
LEFT JOIN pg_catalog.pg_roles gt ON (d.grantee = gt.oid)
|
||||
GROUP BY g.rolname, gt.rolname;
|
|
@ -1,20 +0,0 @@
|
|||
SELECT
|
||||
funcname AS {{ conn|qtIdent(_('Name')) }},
|
||||
calls AS {{ conn|qtIdent(_('Number of calls')) }},
|
||||
total_time AS {{ conn|qtIdent(_('Total time')) }},
|
||||
self_time AS {{ conn|qtIdent(_('Self time')) }}
|
||||
FROM
|
||||
pg_stat_user_functions
|
||||
WHERE
|
||||
schemaname = {{schema_name|qtLiteral}}
|
||||
AND funcid IN (
|
||||
SELECT p.oid
|
||||
FROM
|
||||
pg_proc p
|
||||
JOIN
|
||||
pg_type typ ON typ.oid=p.prorettype
|
||||
WHERE
|
||||
p.proisagg = FALSE
|
||||
AND typname NOT IN ('trigger', 'event_trigger')
|
||||
)
|
||||
ORDER BY funcname;
|
|
@ -1,21 +0,0 @@
|
|||
{% if scid and fnid %}
|
||||
SELECT
|
||||
pr.proname as name, '(' || COALESCE(pg_catalog
|
||||
.pg_get_function_identity_arguments(pr.oid), '') || ')' as func_args,
|
||||
nspname
|
||||
FROM
|
||||
pg_proc pr
|
||||
JOIN
|
||||
pg_type typ ON typ.oid=prorettype
|
||||
JOIN
|
||||
pg_namespace nsp ON nsp.oid=pr.pronamespace
|
||||
WHERE
|
||||
proisagg = FALSE
|
||||
AND pronamespace = {{scid}}::oid
|
||||
AND typname NOT IN ('trigger', 'event_trigger')
|
||||
AND pr.oid = {{fnid}};
|
||||
{% endif %}
|
||||
|
||||
{% if name %}
|
||||
DROP FUNCTION {{ conn|qtIdent(nspname, name) }}{{func_args}}{% if cascade %} CASCADE{% endif %};
|
||||
{% endif %}
|
|
@ -1,12 +0,0 @@
|
|||
SELECT
|
||||
pg_get_functiondef({{fnid}}::oid) AS func_def,
|
||||
nspname || '.' || pr.proname || '(' || COALESCE(pg_catalog.pg_get_function_identity_arguments(pr.oid), '') || ')' as name,
|
||||
nspname || '.' || pr.proname || '(' || COALESCE(pg_catalog.pg_get_function_arguments(pr.oid), '') || ')' as name_with_default_args
|
||||
FROM
|
||||
pg_proc pr
|
||||
JOIN
|
||||
pg_namespace nsp ON nsp.oid=pr.pronamespace
|
||||
WHERE
|
||||
proisagg = FALSE
|
||||
AND pronamespace = {{scid}}::oid
|
||||
AND pr.oid = {{fnid}}::oid;
|
|
@ -1,4 +0,0 @@
|
|||
SELECT
|
||||
lanname as label, lanname as value
|
||||
FROM
|
||||
pg_language;
|
|
@ -1,17 +0,0 @@
|
|||
SELECT
|
||||
pr.oid, pr.proname || '(' || COALESCE(pg_catalog
|
||||
.pg_get_function_identity_arguments(pr.oid), '') || ')' as name,
|
||||
lanname, pg_get_userbyid(proowner) as funcowner, pr.pronamespace as nsp
|
||||
FROM
|
||||
pg_proc pr
|
||||
JOIN
|
||||
pg_type typ ON typ.oid=prorettype
|
||||
JOIN
|
||||
pg_language lng ON lng.oid=prolang
|
||||
JOIN
|
||||
pg_namespace nsp ON nsp.oid=pr.pronamespace
|
||||
AND nsp.nspname={{ nspname|qtLiteral }}
|
||||
WHERE
|
||||
proisagg = FALSE
|
||||
AND typname NOT IN ('trigger', 'event_trigger')
|
||||
AND pr.proname = {{ name|qtLiteral }};
|
|
@ -1,6 +0,0 @@
|
|||
SELECT
|
||||
format_type(oid, NULL) AS out_arg_type
|
||||
FROM
|
||||
pg_type
|
||||
WHERE
|
||||
oid = {{ out_arg_oid }}::oid;
|
|
@ -1,6 +0,0 @@
|
|||
SELECT
|
||||
nspname
|
||||
FROM
|
||||
pg_namespace
|
||||
WHERE
|
||||
oid = {{ scid }}::oid;
|
|
@ -1,20 +0,0 @@
|
|||
SELECT
|
||||
*
|
||||
FROM
|
||||
(SELECT
|
||||
format_type(t.oid,NULL) AS typname,
|
||||
CASE WHEN typelem > 0 THEN typelem ELSE t.oid END as elemoid, typlen, typtype, t.oid, nspname,
|
||||
(SELECT COUNT(1) FROM pg_type t2 WHERE t2.typname = t.typname) > 1 AS isdup
|
||||
FROM
|
||||
pg_type t
|
||||
JOIN
|
||||
pg_namespace nsp ON typnamespace=nsp.oid
|
||||
WHERE
|
||||
(NOT (typname = 'unknown' AND nspname = 'pg_catalog'))
|
||||
AND
|
||||
(
|
||||
typtype IN ('b', 'c', 'd', 'e', 'p', 'r')
|
||||
AND typname NOT IN ('any', 'trigger', 'language_handler', 'event_trigger')
|
||||
)
|
||||
) AS dummy
|
||||
ORDER BY nspname <> 'pg_catalog', nspname <> 'public', nspname, 1;
|
|
@ -1,22 +0,0 @@
|
|||
SELECT
|
||||
pr.oid, pr.proname || '(' || COALESCE(pg_catalog.pg_get_function_identity_arguments(pr.oid), '') || ')' as name,
|
||||
lanname, pg_get_userbyid(proowner) as funcowner, description
|
||||
FROM
|
||||
pg_proc pr
|
||||
JOIN
|
||||
pg_type typ ON typ.oid=prorettype
|
||||
JOIN
|
||||
pg_language lng ON lng.oid=prolang
|
||||
LEFT OUTER JOIN
|
||||
pg_description des ON (des.objoid=pr.oid AND des.classoid='pg_proc'::regclass)
|
||||
WHERE
|
||||
proisagg = FALSE
|
||||
{% if fnid %}
|
||||
AND pr.oid = {{ fnid|qtLiteral }}
|
||||
{% endif %}
|
||||
{% if scid %}
|
||||
AND pronamespace = {{scid}}::oid
|
||||
{% endif %}
|
||||
AND typname NOT IN ('trigger', 'event_trigger')
|
||||
ORDER BY
|
||||
proname;
|
|
@ -1,8 +0,0 @@
|
|||
SELECT
|
||||
calls AS {{ conn|qtIdent(_('Number of calls')) }},
|
||||
total_time AS {{ conn|qtIdent(_('Total time')) }},
|
||||
self_time AS {{ conn|qtIdent(_('Self time')) }}
|
||||
FROM
|
||||
pg_stat_user_functions
|
||||
WHERE
|
||||
funcid = {{fnid}}::OID
|
|
@ -1,6 +0,0 @@
|
|||
SELECT
|
||||
name, vartype, min_val, max_val, enumvals
|
||||
FROM
|
||||
pg_settings
|
||||
WHERE
|
||||
context in ('user', 'superuser');
|
|
@ -1,35 +0,0 @@
|
|||
SELECT
|
||||
COALESCE(gt.rolname, 'PUBLIC') AS grantee,
|
||||
g.rolname AS grantor, array_agg(privilege_type) AS privileges,
|
||||
array_agg(is_grantable) AS grantable
|
||||
FROM
|
||||
(SELECT
|
||||
d.grantee, d.grantor, d.is_grantable,
|
||||
CASE d.privilege_type
|
||||
WHEN 'CONNECT' THEN 'c'
|
||||
WHEN 'CREATE' THEN 'C'
|
||||
WHEN 'DELETE' THEN 'd'
|
||||
WHEN 'EXECUTE' THEN 'X'
|
||||
WHEN 'INSERT' THEN 'a'
|
||||
WHEN 'REFERENCES' THEN 'x'
|
||||
WHEN 'SELECT' THEN 'r'
|
||||
WHEN 'TEMPORARY' THEN 'T'
|
||||
WHEN 'TRIGGER' THEN 't'
|
||||
WHEN 'TRUNCATE' THEN 'D'
|
||||
WHEN 'UPDATE' THEN 'w'
|
||||
WHEN 'USAGE' THEN 'U'
|
||||
ELSE 'UNKNOWN'
|
||||
END AS privilege_type
|
||||
FROM
|
||||
(SELECT
|
||||
(d).grantee AS grantee, (d).grantor AS grantor,
|
||||
(d).is_grantable AS is_grantable,
|
||||
(d).privilege_type AS privilege_type
|
||||
FROM
|
||||
(SELECT aclexplode(db.proacl) AS d FROM pg_proc db
|
||||
WHERE db.oid = {{fnid}}::OID) a
|
||||
) d
|
||||
) d
|
||||
LEFT JOIN pg_catalog.pg_roles g ON (d.grantor = g.oid)
|
||||
LEFT JOIN pg_catalog.pg_roles gt ON (d.grantee = gt.oid)
|
||||
GROUP BY g.rolname, gt.rolname;
|
|
@ -1,20 +0,0 @@
|
|||
SELECT
|
||||
funcname AS {{ conn|qtIdent(_('Name')) }},
|
||||
calls AS {{ conn|qtIdent(_('Number of calls')) }},
|
||||
total_time AS {{ conn|qtIdent(_('Total time')) }},
|
||||
self_time AS {{ conn|qtIdent(_('Self time')) }}
|
||||
FROM
|
||||
pg_stat_user_functions
|
||||
WHERE
|
||||
schemaname = {{schema_name|qtLiteral}}
|
||||
AND funcid IN (
|
||||
SELECT p.oid
|
||||
FROM
|
||||
pg_proc p
|
||||
JOIN
|
||||
pg_type typ ON typ.oid=p.prorettype
|
||||
WHERE
|
||||
p.proisagg = FALSE
|
||||
AND typname NOT IN ('trigger', 'event_trigger')
|
||||
)
|
||||
ORDER BY funcname;
|
|
@ -1,12 +0,0 @@
|
|||
SELECT
|
||||
pg_get_functiondef({{fnid}}::oid) AS func_def,
|
||||
nspname || '.' || pr.proname || '(' || COALESCE(pg_catalog.pg_get_function_identity_arguments(pr.oid), '') || ')' as name,
|
||||
nspname || '.' || pr.proname || '(' || COALESCE(pg_catalog.pg_get_function_arguments(pr.oid), '') || ')' as name_with_default_args
|
||||
FROM
|
||||
pg_proc pr
|
||||
JOIN
|
||||
pg_namespace nsp ON nsp.oid=pr.pronamespace
|
||||
WHERE
|
||||
proisagg = FALSE
|
||||
AND pronamespace = {{scid}}::oid
|
||||
AND pr.oid = {{fnid}}::oid;
|
|
@ -1,4 +0,0 @@
|
|||
SELECT
|
||||
lanname as label, lanname as value
|
||||
FROM
|
||||
pg_language;
|
|
@ -1,6 +0,0 @@
|
|||
SELECT
|
||||
format_type(oid, NULL) AS out_arg_type
|
||||
FROM
|
||||
pg_type
|
||||
WHERE
|
||||
oid = {{ out_arg_oid }}::oid;
|
|
@ -1,6 +0,0 @@
|
|||
SELECT
|
||||
nspname
|
||||
FROM
|
||||
pg_namespace
|
||||
WHERE
|
||||
oid = {{ scid }}::oid;
|
|
@ -1,20 +0,0 @@
|
|||
SELECT
|
||||
*
|
||||
FROM
|
||||
(SELECT
|
||||
format_type(t.oid,NULL) AS typname,
|
||||
CASE WHEN typelem > 0 THEN typelem ELSE t.oid END as elemoid, typlen, typtype, t.oid, nspname,
|
||||
(SELECT COUNT(1) FROM pg_type t2 WHERE t2.typname = t.typname) > 1 AS isdup
|
||||
FROM
|
||||
pg_type t
|
||||
JOIN
|
||||
pg_namespace nsp ON typnamespace=nsp.oid
|
||||
WHERE
|
||||
(NOT (typname = 'unknown' AND nspname = 'pg_catalog'))
|
||||
AND
|
||||
(
|
||||
typtype IN ('b', 'c', 'd', 'e', 'p', 'r')
|
||||
AND typname NOT IN ('any', 'trigger', 'language_handler', 'event_trigger')
|
||||
)
|
||||
) AS dummy
|
||||
ORDER BY nspname <> 'pg_catalog', nspname <> 'public', nspname, 1;
|
|
@ -1,23 +0,0 @@
|
|||
SELECT
|
||||
pr.oid, pr.proname || '(' || COALESCE(pg_catalog.pg_get_function_identity_arguments(pr.oid), '') || ')' AS name,
|
||||
lanname, pg_get_userbyid(proowner) AS funcowner, description
|
||||
FROM
|
||||
pg_proc pr
|
||||
JOIN
|
||||
pg_type typ ON typ.oid=prorettype
|
||||
JOIN
|
||||
pg_language lng ON lng.oid=prolang
|
||||
LEFT OUTER JOIN
|
||||
pg_description des ON (des.objoid=pr.oid AND des.classoid='pg_proc'::regclass)
|
||||
WHERE
|
||||
proisagg = FALSE
|
||||
AND pr.protype = '0'::char
|
||||
{% if fnid %}
|
||||
AND pr.oid = {{ fnid|qtLiteral }}
|
||||
{% endif %}
|
||||
{% if scid %}
|
||||
AND pronamespace = {{scid}}::oid
|
||||
{% endif %}
|
||||
AND typname NOT IN ('trigger', 'event_trigger')
|
||||
ORDER BY
|
||||
proname;
|
|
@ -1,32 +0,0 @@
|
|||
SELECT
|
||||
pr.oid, pr.xmin, pr.*, pr.prosrc AS prosrc_c,
|
||||
pr.proname AS name, pg_get_function_result(pr.oid) AS prorettypename,
|
||||
typns.nspname AS typnsp, lanname, proargnames, oidvectortypes(proargtypes) AS proargtypenames,
|
||||
pg_get_expr(proargdefaults, 'pg_catalog.pg_class'::regclass) AS proargdefaultvals,
|
||||
pronargdefaults, proconfig, pg_get_userbyid(proowner) AS funcowner, description,
|
||||
(SELECT
|
||||
array_agg(provider || '=' || label)
|
||||
FROM
|
||||
pg_seclabel sl1
|
||||
WHERE
|
||||
sl1.objoid=pr.oid) AS seclabels
|
||||
FROM
|
||||
pg_proc pr
|
||||
JOIN
|
||||
pg_type typ ON typ.oid=prorettype
|
||||
JOIN
|
||||
pg_namespace typns ON typns.oid=typ.typnamespace
|
||||
JOIN
|
||||
pg_language lng ON lng.oid=prolang
|
||||
LEFT OUTER JOIN
|
||||
pg_description des ON (des.objoid=pr.oid AND des.classoid='pg_proc'::regclass)
|
||||
WHERE
|
||||
proisagg = FALSE
|
||||
AND typname NOT IN ('trigger', 'event_trigger')
|
||||
{% if fnid %}
|
||||
AND pr.oid = {{fnid}}::oid
|
||||
{% else %}
|
||||
AND pronamespace = {{scid}}::oid
|
||||
{% endif %}
|
||||
ORDER BY
|
||||
proname;
|
|
@ -1,8 +0,0 @@
|
|||
SELECT
|
||||
calls AS {{ conn|qtIdent(_('Number of calls')) }},
|
||||
total_time AS {{ conn|qtIdent(_('Total time')) }},
|
||||
self_time AS {{ conn|qtIdent(_('Self time')) }}
|
||||
FROM
|
||||
pg_stat_user_functions
|
||||
WHERE
|
||||
funcid = {{fnid}}::OID
|
|
@ -1,6 +0,0 @@
|
|||
SELECT
|
||||
name, vartype, min_val, max_val, enumvals
|
||||
FROM
|
||||
pg_settings
|
||||
WHERE
|
||||
context in ('user', 'superuser');
|
|
@ -1,35 +0,0 @@
|
|||
SELECT
|
||||
COALESCE(gt.rolname, 'PUBLIC') AS grantee,
|
||||
g.rolname AS grantor, array_agg(privilege_type) AS privileges,
|
||||
array_agg(is_grantable) AS grantable
|
||||
FROM
|
||||
(SELECT
|
||||
d.grantee, d.grantor, d.is_grantable,
|
||||
CASE d.privilege_type
|
||||
WHEN 'CONNECT' THEN 'c'
|
||||
WHEN 'CREATE' THEN 'C'
|
||||
WHEN 'DELETE' THEN 'd'
|
||||
WHEN 'EXECUTE' THEN 'X'
|
||||
WHEN 'INSERT' THEN 'a'
|
||||
WHEN 'REFERENCES' THEN 'x'
|
||||
WHEN 'SELECT' THEN 'r'
|
||||
WHEN 'TEMPORARY' THEN 'T'
|
||||
WHEN 'TRIGGER' THEN 't'
|
||||
WHEN 'TRUNCATE' THEN 'D'
|
||||
WHEN 'UPDATE' THEN 'w'
|
||||
WHEN 'USAGE' THEN 'U'
|
||||
ELSE 'UNKNOWN'
|
||||
END AS privilege_type
|
||||
FROM
|
||||
(SELECT
|
||||
(d).grantee AS grantee, (d).grantor AS grantor,
|
||||
(d).is_grantable AS is_grantable,
|
||||
(d).privilege_type AS privilege_type
|
||||
FROM
|
||||
(SELECT aclexplode(db.proacl) AS d FROM pg_proc db
|
||||
WHERE db.oid = {{fnid}}::OID) a
|
||||
) d
|
||||
) d
|
||||
LEFT JOIN pg_catalog.pg_roles g ON (d.grantor = g.oid)
|
||||
LEFT JOIN pg_catalog.pg_roles gt ON (d.grantee = gt.oid)
|
||||
GROUP BY g.rolname, gt.rolname;
|
|
@ -1,20 +0,0 @@
|
|||
SELECT
|
||||
funcname AS {{ conn|qtIdent(_('Name')) }},
|
||||
calls AS {{ conn|qtIdent(_('Number of calls')) }},
|
||||
total_time AS {{ conn|qtIdent(_('Total time')) }},
|
||||
self_time AS {{ conn|qtIdent(_('Self time')) }}
|
||||
FROM
|
||||
pg_stat_user_functions
|
||||
WHERE
|
||||
schemaname = {{schema_name|qtLiteral}}
|
||||
AND funcid IN (
|
||||
SELECT p.oid
|
||||
FROM
|
||||
pg_proc p
|
||||
JOIN
|
||||
pg_type typ ON typ.oid=p.prorettype
|
||||
WHERE
|
||||
p.proisagg = FALSE
|
||||
AND typname NOT IN ('trigger', 'event_trigger')
|
||||
)
|
||||
ORDER BY funcname;
|
|
@ -1,12 +0,0 @@
|
|||
SELECT
|
||||
pg_get_functiondef({{fnid}}::oid) AS func_def,
|
||||
nspname || '.' || pr.proname || '(' || COALESCE(pg_catalog.pg_get_function_identity_arguments(pr.oid), '') || ')' as name,
|
||||
nspname || '.' || pr.proname || '(' || COALESCE(pg_catalog.pg_get_function_arguments(pr.oid), '') || ')' as name_with_default_args
|
||||
FROM
|
||||
pg_proc pr
|
||||
JOIN
|
||||
pg_namespace nsp ON nsp.oid=pr.pronamespace
|
||||
WHERE
|
||||
proisagg = FALSE
|
||||
AND pronamespace = {{scid}}::oid
|
||||
AND pr.oid = {{fnid}}::oid;
|
|
@ -1,4 +0,0 @@
|
|||
SELECT
|
||||
lanname as label, lanname as value
|
||||
FROM
|
||||
pg_language;
|
|
@ -1,17 +0,0 @@
|
|||
SELECT
|
||||
pr.oid, pr.proname || '(' || COALESCE(pg_catalog
|
||||
.pg_get_function_identity_arguments(pr.oid), '') || ')' as name,
|
||||
lanname, pg_get_userbyid(proowner) as funcowner, pr.pronamespace AS nsp
|
||||
FROM
|
||||
pg_proc pr
|
||||
JOIN
|
||||
pg_type typ ON typ.oid=prorettype
|
||||
JOIN
|
||||
pg_language lng ON lng.oid=prolang
|
||||
JOIN
|
||||
pg_namespace nsp ON nsp.oid=pr.pronamespace
|
||||
AND nsp.nspname={{ nspname|qtLiteral }}
|
||||
WHERE
|
||||
proisagg = FALSE
|
||||
AND typname NOT IN ('trigger', 'event_trigger')
|
||||
AND pr.proname = {{ name|qtLiteral }};
|
|
@ -1,6 +0,0 @@
|
|||
SELECT
|
||||
format_type(oid, NULL) AS out_arg_type
|
||||
FROM
|
||||
pg_type
|
||||
WHERE
|
||||
oid = {{ out_arg_oid }}::oid;
|
|
@ -1,6 +0,0 @@
|
|||
SELECT
|
||||
nspname
|
||||
FROM
|
||||
pg_namespace
|
||||
WHERE
|
||||
oid = {{ scid }}::oid;
|
|
@ -1,20 +0,0 @@
|
|||
SELECT
|
||||
*
|
||||
FROM
|
||||
(SELECT
|
||||
format_type(t.oid,NULL) AS typname,
|
||||
CASE WHEN typelem > 0 THEN typelem ELSE t.oid END as elemoid, typlen, typtype, t.oid, nspname,
|
||||
(SELECT COUNT(1) FROM pg_type t2 WHERE t2.typname = t.typname) > 1 AS isdup
|
||||
FROM
|
||||
pg_type t
|
||||
JOIN
|
||||
pg_namespace nsp ON typnamespace=nsp.oid
|
||||
WHERE
|
||||
(NOT (typname = 'unknown' AND nspname = 'pg_catalog'))
|
||||
AND
|
||||
(
|
||||
typtype IN ('b', 'c', 'd', 'e', 'p', 'r')
|
||||
AND typname NOT IN ('any', 'trigger', 'language_handler', 'event_trigger')
|
||||
)
|
||||
) AS dummy
|
||||
ORDER BY nspname <> 'pg_catalog', nspname <> 'public', nspname, 1;
|
|
@ -1,23 +0,0 @@
|
|||
SELECT
|
||||
pr.oid, pr.proname || '(' || COALESCE(pg_catalog.pg_get_function_identity_arguments(pr.oid), '') || ')' AS name,
|
||||
lanname, pg_get_userbyid(proowner) AS funcowner, description
|
||||
FROM
|
||||
pg_proc pr
|
||||
JOIN
|
||||
pg_type typ ON typ.oid=prorettype
|
||||
JOIN
|
||||
pg_language lng ON lng.oid=prolang
|
||||
LEFT OUTER JOIN
|
||||
pg_description des ON (des.objoid=pr.oid AND des.classoid='pg_proc'::regclass)
|
||||
WHERE
|
||||
proisagg = FALSE
|
||||
AND pr.protype = '0'::char
|
||||
{% if fnid %}
|
||||
AND pr.oid = {{ fnid|qtLiteral }}
|
||||
{% endif %}
|
||||
{% if scid %}
|
||||
AND pronamespace = {{scid}}::oid
|
||||
{% endif %}
|
||||
AND typname NOT IN ('trigger', 'event_trigger')
|
||||
ORDER BY
|
||||
proname;
|
|
@ -1,32 +0,0 @@
|
|||
SELECT
|
||||
pr.oid, pr.xmin, pr.*, pr.prosrc AS prosrc_c,
|
||||
pr.proname AS name, pg_get_function_result(pr.oid) AS prorettypename,
|
||||
typns.nspname AS typnsp, lanname, proargnames, oidvectortypes(proargtypes) AS proargtypenames,
|
||||
pg_get_expr(proargdefaults, 'pg_catalog.pg_class'::regclass) AS proargdefaultvals,
|
||||
pronargdefaults, proconfig, pg_get_userbyid(proowner) AS funcowner, description,
|
||||
(SELECT
|
||||
array_agg(provider || '=' || label)
|
||||
FROM
|
||||
pg_seclabel sl1
|
||||
WHERE
|
||||
sl1.objoid=pr.oid) AS seclabels
|
||||
FROM
|
||||
pg_proc pr
|
||||
JOIN
|
||||
pg_type typ ON typ.oid=prorettype
|
||||
JOIN
|
||||
pg_namespace typns ON typns.oid=typ.typnamespace
|
||||
JOIN
|
||||
pg_language lng ON lng.oid=prolang
|
||||
LEFT OUTER JOIN
|
||||
pg_description des ON (des.objoid=pr.oid AND des.classoid='pg_proc'::regclass)
|
||||
WHERE
|
||||
proisagg = FALSE
|
||||
AND typname NOT IN ('trigger', 'event_trigger')
|
||||
{% if fnid %}
|
||||
AND pr.oid = {{fnid}}::oid
|
||||
{% else %}
|
||||
AND pronamespace = {{scid}}::oid
|
||||
{% endif %}
|
||||
ORDER BY
|
||||
proname;
|
|
@ -1,8 +0,0 @@
|
|||
SELECT
|
||||
calls AS {{ conn|qtIdent(_('Number of calls')) }},
|
||||
total_time AS {{ conn|qtIdent(_('Total time')) }},
|
||||
self_time AS {{ conn|qtIdent(_('Self time')) }}
|
||||
FROM
|
||||
pg_stat_user_functions
|
||||
WHERE
|
||||
funcid = {{fnid}}::OID
|
|
@ -1,6 +0,0 @@
|
|||
SELECT
|
||||
name, vartype, min_val, max_val, enumvals
|
||||
FROM
|
||||
pg_settings
|
||||
WHERE
|
||||
context in ('user', 'superuser');
|
|
@ -1,35 +0,0 @@
|
|||
SELECT
|
||||
COALESCE(gt.rolname, 'PUBLIC') AS grantee,
|
||||
g.rolname AS grantor, array_agg(privilege_type) AS privileges,
|
||||
array_agg(is_grantable) AS grantable
|
||||
FROM
|
||||
(SELECT
|
||||
d.grantee, d.grantor, d.is_grantable,
|
||||
CASE d.privilege_type
|
||||
WHEN 'CONNECT' THEN 'c'
|
||||
WHEN 'CREATE' THEN 'C'
|
||||
WHEN 'DELETE' THEN 'd'
|
||||
WHEN 'EXECUTE' THEN 'X'
|
||||
WHEN 'INSERT' THEN 'a'
|
||||
WHEN 'REFERENCES' THEN 'x'
|
||||
WHEN 'SELECT' THEN 'r'
|
||||
WHEN 'TEMPORARY' THEN 'T'
|
||||
WHEN 'TRIGGER' THEN 't'
|
||||
WHEN 'TRUNCATE' THEN 'D'
|
||||
WHEN 'UPDATE' THEN 'w'
|
||||
WHEN 'USAGE' THEN 'U'
|
||||
ELSE 'UNKNOWN'
|
||||
END AS privilege_type
|
||||
FROM
|
||||
(SELECT
|
||||
(d).grantee AS grantee, (d).grantor AS grantor,
|
||||
(d).is_grantable AS is_grantable,
|
||||
(d).privilege_type AS privilege_type
|
||||
FROM
|
||||
(SELECT aclexplode(db.proacl) AS d FROM pg_proc db
|
||||
WHERE db.oid = {{fnid}}::OID) a
|
||||
) d
|
||||
) d
|
||||
LEFT JOIN pg_catalog.pg_roles g ON (d.grantor = g.oid)
|
||||
LEFT JOIN pg_catalog.pg_roles gt ON (d.grantee = gt.oid)
|
||||
GROUP BY g.rolname, gt.rolname;
|
|
@ -1,20 +0,0 @@
|
|||
SELECT
|
||||
funcname AS {{ conn|qtIdent(_('Name')) }},
|
||||
calls AS {{ conn|qtIdent(_('Number of calls')) }},
|
||||
total_time AS {{ conn|qtIdent(_('Total time')) }},
|
||||
self_time AS {{ conn|qtIdent(_('Self time')) }}
|
||||
FROM
|
||||
pg_stat_user_functions
|
||||
WHERE
|
||||
schemaname = {{schema_name|qtLiteral}}
|
||||
AND funcid IN (
|
||||
SELECT p.oid
|
||||
FROM
|
||||
pg_proc p
|
||||
JOIN
|
||||
pg_type typ ON typ.oid=p.prorettype
|
||||
WHERE
|
||||
p.proisagg = FALSE
|
||||
AND typname NOT IN ('trigger', 'event_trigger')
|
||||
)
|
||||
ORDER BY funcname;
|
|
@ -1,21 +0,0 @@
|
|||
{% if scid and fnid %}
|
||||
SELECT
|
||||
pr.proname as name, '(' || COALESCE(pg_catalog
|
||||
.pg_get_function_identity_arguments(pr.oid), '') || ')' as func_args,
|
||||
nspname
|
||||
FROM
|
||||
pg_proc pr
|
||||
JOIN
|
||||
pg_type typ ON typ.oid=prorettype
|
||||
JOIN
|
||||
pg_namespace nsp ON nsp.oid=pr.pronamespace
|
||||
WHERE
|
||||
proisagg = FALSE
|
||||
AND pronamespace = {{scid}}::oid
|
||||
AND typname NOT IN ('trigger', 'event_trigger')
|
||||
AND pr.oid = {{fnid}};
|
||||
{% endif %}
|
||||
|
||||
{% if name %}
|
||||
DROP PROCEDURE {{ conn|qtIdent(nspname, name) }};
|
||||
{% endif %}
|
|
@ -1,12 +0,0 @@
|
|||
SELECT
|
||||
pg_get_functiondef({{fnid}}::oid) AS func_def,
|
||||
nspname || '.' || pr.proname || '(' || COALESCE(pg_catalog.pg_get_function_identity_arguments(pr.oid), '') || ')' as name,
|
||||
nspname || '.' || pr.proname || '(' || COALESCE(pg_catalog.pg_get_function_arguments(pr.oid), '') || ')' as name_with_default_args
|
||||
FROM
|
||||
pg_proc pr
|
||||
JOIN
|
||||
pg_namespace nsp ON nsp.oid=pr.pronamespace
|
||||
WHERE
|
||||
proisagg = FALSE
|
||||
AND pronamespace = {{scid}}::oid
|
||||
AND pr.oid = {{fnid}}::oid;
|
|
@ -1,4 +0,0 @@
|
|||
SELECT
|
||||
lanname as label, lanname as value
|
||||
FROM
|
||||
pg_language;
|
|
@ -1,17 +0,0 @@
|
|||
SELECT
|
||||
pr.oid, pr.proname || '(' || COALESCE(pg_catalog
|
||||
.pg_get_function_identity_arguments(pr.oid), '') || ')' as name,
|
||||
lanname, pg_get_userbyid(proowner) as funcowner, pr.pronamespace AS nsp
|
||||
FROM
|
||||
pg_proc pr
|
||||
JOIN
|
||||
pg_type typ ON typ.oid=prorettype
|
||||
JOIN
|
||||
pg_language lng ON lng.oid=prolang
|
||||
JOIN
|
||||
pg_namespace nsp ON nsp.oid=pr.pronamespace
|
||||
AND nsp.nspname={{ nspname|qtLiteral }}
|
||||
WHERE
|
||||
proisagg = FALSE
|
||||
AND typname NOT IN ('trigger', 'event_trigger')
|
||||
AND pr.proname = {{ name|qtLiteral }};
|
|
@ -1,6 +0,0 @@
|
|||
SELECT
|
||||
format_type(oid, NULL) AS out_arg_type
|
||||
FROM
|
||||
pg_type
|
||||
WHERE
|
||||
oid = {{ out_arg_oid }}::oid;
|
|
@ -1,6 +0,0 @@
|
|||
SELECT
|
||||
nspname
|
||||
FROM
|
||||
pg_namespace
|
||||
WHERE
|
||||
oid = {{ scid }}::oid;
|
|
@ -1,20 +0,0 @@
|
|||
SELECT
|
||||
*
|
||||
FROM
|
||||
(SELECT
|
||||
format_type(t.oid,NULL) AS typname,
|
||||
CASE WHEN typelem > 0 THEN typelem ELSE t.oid END as elemoid, typlen, typtype, t.oid, nspname,
|
||||
(SELECT COUNT(1) FROM pg_type t2 WHERE t2.typname = t.typname) > 1 AS isdup
|
||||
FROM
|
||||
pg_type t
|
||||
JOIN
|
||||
pg_namespace nsp ON typnamespace=nsp.oid
|
||||
WHERE
|
||||
(NOT (typname = 'unknown' AND nspname = 'pg_catalog'))
|
||||
AND
|
||||
(
|
||||
typtype IN ('b', 'c', 'd', 'e', 'p', 'r')
|
||||
AND typname NOT IN ('any', 'trigger', 'language_handler', 'event_trigger')
|
||||
)
|
||||
) AS dummy
|
||||
ORDER BY nspname <> 'pg_catalog', nspname <> 'public', nspname, 1;
|
|
@ -1,30 +0,0 @@
|
|||
SELECT
|
||||
pr.oid,
|
||||
CASE WHEN
|
||||
pg_catalog.pg_get_function_identity_arguments(pr.oid) <> ''
|
||||
THEN
|
||||
pr.proname || '(' || pg_catalog.pg_get_function_identity_arguments(pr.oid) || ')'
|
||||
ELSE
|
||||
pr.proname
|
||||
END AS name,
|
||||
lanname, pg_get_userbyid(proowner) AS funcowner, description
|
||||
FROM
|
||||
pg_proc pr
|
||||
JOIN
|
||||
pg_type typ ON typ.oid=prorettype
|
||||
JOIN
|
||||
pg_language lng ON lng.oid=prolang
|
||||
LEFT OUTER JOIN
|
||||
pg_description des ON (des.objoid=pr.oid AND des.classoid='pg_proc'::regclass)
|
||||
WHERE
|
||||
proisagg = FALSE
|
||||
AND pr.protype = '1'::char
|
||||
{% if fnid %}
|
||||
AND pr.oid = {{ fnid|qtLiteral }}
|
||||
{% endif %}
|
||||
{% if scid %}
|
||||
AND pronamespace = {{scid}}::oid
|
||||
{% endif %}
|
||||
AND typname NOT IN ('trigger', 'event_trigger')
|
||||
ORDER BY
|
||||
proname;
|
|
@ -1,39 +0,0 @@
|
|||
SELECT
|
||||
pr.oid, pr.xmin, pr.*, pr.prosrc AS prosrc_c,
|
||||
pr.proname AS name, pg_get_function_result(pr.oid) AS prorettypename,
|
||||
typns.nspname AS typnsp, lanname, proargnames, oidvectortypes(proargtypes) AS proargtypenames,
|
||||
pg_get_expr(proargdefaults, 'pg_catalog.pg_class'::regclass) AS proargdefaultvals,
|
||||
pronargdefaults, proconfig, pg_get_userbyid(proowner) AS funcowner, description,
|
||||
(CASE WHEN
|
||||
pg_catalog.pg_get_function_identity_arguments(pr.oid) <> ''
|
||||
THEN
|
||||
pr.proname || '(' || pg_catalog.pg_get_function_identity_arguments(pr.oid) || ')'
|
||||
ELSE
|
||||
pr.proname
|
||||
END) AS name_with_args,
|
||||
(SELECT
|
||||
array_agg(provider || '=' || label)
|
||||
FROM
|
||||
pg_seclabel sl1
|
||||
WHERE
|
||||
sl1.objoid=pr.oid) AS seclabels
|
||||
FROM
|
||||
pg_proc pr
|
||||
JOIN
|
||||
pg_type typ ON typ.oid=prorettype
|
||||
JOIN
|
||||
pg_namespace typns ON typns.oid=typ.typnamespace
|
||||
JOIN
|
||||
pg_language lng ON lng.oid=prolang
|
||||
LEFT OUTER JOIN
|
||||
pg_description des ON (des.objoid=pr.oid AND des.classoid='pg_proc'::regclass)
|
||||
WHERE
|
||||
proisagg = FALSE
|
||||
AND typname NOT IN ('trigger', 'event_trigger')
|
||||
{% if fnid %}
|
||||
AND pr.oid = {{fnid}}::oid
|
||||
{% else %}
|
||||
AND pronamespace = {{scid}}::oid
|
||||
{% endif %}
|
||||
ORDER BY
|
||||
proname;
|
|
@ -1,8 +0,0 @@
|
|||
SELECT
|
||||
calls AS {{ conn|qtIdent(_('Number of calls')) }},
|
||||
total_time AS {{ conn|qtIdent(_('Total time')) }},
|
||||
self_time AS {{ conn|qtIdent(_('Self time')) }}
|
||||
FROM
|
||||
pg_stat_user_functions
|
||||
WHERE
|
||||
funcid = {{fnid}}::OID
|
|
@ -1,6 +0,0 @@
|
|||
SELECT
|
||||
name, vartype, min_val, max_val, enumvals
|
||||
FROM
|
||||
pg_settings
|
||||
WHERE
|
||||
context in ('user', 'superuser');
|
|
@ -1,35 +0,0 @@
|
|||
SELECT
|
||||
COALESCE(gt.rolname, 'PUBLIC') AS grantee,
|
||||
g.rolname AS grantor, array_agg(privilege_type) AS privileges,
|
||||
array_agg(is_grantable) AS grantable
|
||||
FROM
|
||||
(SELECT
|
||||
d.grantee, d.grantor, d.is_grantable,
|
||||
CASE d.privilege_type
|
||||
WHEN 'CONNECT' THEN 'c'
|
||||
WHEN 'CREATE' THEN 'C'
|
||||
WHEN 'DELETE' THEN 'd'
|
||||
WHEN 'EXECUTE' THEN 'X'
|
||||
WHEN 'INSERT' THEN 'a'
|
||||
WHEN 'REFERENCES' THEN 'x'
|
||||
WHEN 'SELECT' THEN 'r'
|
||||
WHEN 'TEMPORARY' THEN 'T'
|
||||
WHEN 'TRIGGER' THEN 't'
|
||||
WHEN 'TRUNCATE' THEN 'D'
|
||||
WHEN 'UPDATE' THEN 'w'
|
||||
WHEN 'USAGE' THEN 'U'
|
||||
ELSE 'UNKNOWN'
|
||||
END AS privilege_type
|
||||
FROM
|
||||
(SELECT
|
||||
(d).grantee AS grantee, (d).grantor AS grantor,
|
||||
(d).is_grantable AS is_grantable,
|
||||
(d).privilege_type AS privilege_type
|
||||
FROM
|
||||
(SELECT aclexplode(db.proacl) AS d FROM pg_proc db
|
||||
WHERE db.oid = {{fnid}}::OID) a
|
||||
) d
|
||||
) d
|
||||
LEFT JOIN pg_catalog.pg_roles g ON (d.grantor = g.oid)
|
||||
LEFT JOIN pg_catalog.pg_roles gt ON (d.grantee = gt.oid)
|
||||
GROUP BY g.rolname, gt.rolname;
|
|
@ -1,20 +0,0 @@
|
|||
SELECT
|
||||
funcname AS {{ conn|qtIdent(_('Name')) }},
|
||||
calls AS {{ conn|qtIdent(_('Number of calls')) }},
|
||||
total_time AS {{ conn|qtIdent(_('Total time')) }},
|
||||
self_time AS {{ conn|qtIdent(_('Self time')) }}
|
||||
FROM
|
||||
pg_stat_user_functions
|
||||
WHERE
|
||||
schemaname = {{schema_name|qtLiteral}}
|
||||
AND funcid IN (
|
||||
SELECT p.oid
|
||||
FROM
|
||||
pg_proc p
|
||||
JOIN
|
||||
pg_type typ ON typ.oid=p.prorettype
|
||||
WHERE
|
||||
p.proisagg = FALSE
|
||||
AND typname NOT IN ('trigger', 'event_trigger')
|
||||
)
|
||||
ORDER BY funcname;
|
|
@ -1,21 +0,0 @@
|
|||
{% if scid and fnid %}
|
||||
SELECT
|
||||
pr.proname as name, '(' || COALESCE(pg_catalog
|
||||
.pg_get_function_identity_arguments(pr.oid), '') || ')' as func_args,
|
||||
nspname
|
||||
FROM
|
||||
pg_proc pr
|
||||
JOIN
|
||||
pg_type typ ON typ.oid=prorettype
|
||||
JOIN
|
||||
pg_namespace nsp ON nsp.oid=pr.pronamespace
|
||||
WHERE
|
||||
proisagg = FALSE
|
||||
AND pronamespace = {{scid}}::oid
|
||||
AND typname NOT IN ('trigger', 'event_trigger')
|
||||
AND pr.oid = {{fnid}};
|
||||
{% endif %}
|
||||
|
||||
{% if name %}
|
||||
DROP PROCEDURE {{ conn|qtIdent(nspname, name) }};
|
||||
{% endif %}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue