postgres数据库建库、修改owner

时间:2019-10-15
本文章向大家介绍postgres数据库建库、修改owner,主要包括postgres数据库建库、修改owner使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1、创建用户角色

create user XXX with password 'XXXXXX';

--或者 

create role XXX with password 'XXXXX' login;

注意:使用create role时,需要携带  login参数,否则将无法登录,如果忘记可使用命令修改:

alter role XXX  login;

2、创建数据库:

 1 CREATE DATABASE yysg
 2 WITH OWNER = yysg
 3 ENCODING = 'UTF8'
 4 TABLESPACE = pg_default
 5 LC_COLLATE = 'en_US.UTF-8'
 6 LC_CTYPE = 'en_US.UTF-8'
 7 CONNECTION LIMIT = -1
 8 
 9 TEMPLATE template0;
10 
11 GRANT CONNECT, TEMPORARY ON DATABASE yysg TO public;
12 GRANT ALL ON DATABASE yysg TO yysg;
13 GRANT ALL ON DATABASE yysg TO postgres;
14 
15 COMMENT ON DATABASE yysg
16 IS 'XXX database name';

注意:如果出现如下错误,请加上: TEMPLATE template0;

ERROR:  new collation (zh_CN.UTF-8) is incompatible with the collation of the template    database (en_US.UTF8)
HINT:  Use the same collation as in the template database, or use template0 as template.

3、修改整个schema所有表owner

 1 DO $$
 2 DECLARE
 3     r record;
 4     i int;
 5     v_schema text[] := '{public}';
 6     v_new_owner varchar := 'yysg';
 7 BEGIN
 8     FOR r IN
 9         SELECT 'ALTER TABLE "' || table_schema || '"."' || table_name || '" OWNER TO ' || v_new_owner || ';' AS a FROM information_schema.tables WHERE table_schema = ANY (v_schema)
10         UNION ALL
11         SELECT 'ALTER TABLE "' || sequence_schema || '"."' || sequence_name || '" OWNER TO ' || v_new_owner || ';' AS a FROM information_schema.sequences WHERE sequence_schema = ANY (v_schema)
12         UNION ALL
13         SELECT 'ALTER TABLE "' || table_schema || '"."' || table_name || '" OWNER TO ' || v_new_owner || ';' AS a FROM information_schema.views WHERE table_schema = ANY (v_schema)
14         UNION ALL
15         SELECT 'ALTER FUNCTION "' || nsp.nspname || '"."' || p.proname || '"(' || pg_get_function_identity_arguments(p.oid) || ') OWNER TO ' || v_new_owner || ';' AS a FROM pg_proc p JOIN pg_namespace nsp ON p.pronamespace = nsp.oid WHERE nsp.nspname = ANY (v_schema)
16         UNION ALL
17         SELECT 'ALTER DATABASE "' || current_database() || '" OWNER TO ' || v_new_owner
18     LOOP
19         EXECUTE r.a;
20     END LOOP;
21     FOR i IN array_lower(v_schema, 1)..array_upper(v_schema, 1)
22     LOOP
23         EXECUTE 'ALTER SCHEMA "' || v_schema[i] || '" OWNER TO ' || v_new_owner;
24     END LOOP;
25 END
26 $$;
View Code



						

原文地址:https://www.cnblogs.com/htlee/p/11677398.html