2014-05-05 23:13:06 +08:00
|
|
|
-- Function returning list of cartodb user tables
|
|
|
|
--
|
|
|
|
-- The optional argument restricts the result to tables
|
|
|
|
-- of the specified access type.
|
|
|
|
--
|
|
|
|
-- Currently accepted permissions are: 'public', 'private' or 'all'
|
|
|
|
--
|
|
|
|
CREATE OR REPLACE FUNCTION CDB_UserTables(perm text DEFAULT 'all')
|
2015-06-02 00:46:19 +08:00
|
|
|
RETURNS SETOF name
|
2014-05-05 23:13:06 +08:00
|
|
|
AS $$
|
2015-06-02 00:46:19 +08:00
|
|
|
|
|
|
|
SELECT c.relname
|
|
|
|
FROM pg_class c
|
|
|
|
JOIN pg_roles r ON r.oid = c.relowner
|
|
|
|
JOIN pg_namespace n ON n.oid = c.relnamespace
|
|
|
|
WHERE r.rolname = current_user
|
|
|
|
AND c.relkind = 'r'
|
|
|
|
AND c.relname NOT IN ('cdb_tablemetadata', 'spatial_ref_sys')
|
|
|
|
AND n.nspname NOT IN ('pg_catalog', 'information_schema')
|
|
|
|
AND CASE WHEN perm = 'public' THEN has_table_privilege('public', c.oid, 'SELECT')
|
|
|
|
WHEN perm = 'private' THEN has_table_privilege(c.oid, 'SELECT') AND NOT
|
|
|
|
has_table_privilege('public', c.oid, 'SELECT')
|
|
|
|
ELSE has_table_privilege(c.oid, 'SELECT') END;
|
|
|
|
|
2014-05-05 23:13:06 +08:00
|
|
|
$$ LANGUAGE 'sql';
|
|
|
|
|
2014-06-06 17:33:34 +08:00
|
|
|
-- This is to migrate from pre-0.2.0 version
|
|
|
|
-- See http://github.com/CartoDB/cartodb-postgresql/issues/36
|
|
|
|
GRANT EXECUTE ON FUNCTION CDB_UserTables(text) TO public;
|