postgresql模式管理

前端之家收集整理的这篇文章主要介绍了postgresql模式管理前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
一.用户
pg的user和role几乎是一样的,只是role是无法登录系统的,而用户可以
创建用户使用create user语句,一般使用create user with password 'xxx' XXX 其中最后的XXX是给予的角色权限
   
   
postgres=# \h create user@H_502_51@;Command@H_502_51@: CREATE USERDescription define a new database roleSyntaxCREATE USER name @H_502_51@[ WITH @H_502_51@] option @H_502_51@...]where option can be SUPERUSER @H_502_51@| NOSUPERUSER CREATEDB NOCREATEDB CREATEROLE NOCREATEROLE CREATEUSER NOCREATEUSER INHERIT NOINHERIT LOGIN NOLOGIN REPLICATION NOREPLICATION BYPASSRLS NOBYPASSRLS CONNECTION LIMIT connlimit ENCRYPTED UNENCRYPTED PASSWORD 'password' VALID UNTIL 'timestamp' IN ROLE role_name @H_502_51@[,...] IN GROUP role_name ROLE role_name ADMIN role_name USER role_name SYSID uid
    
    
create user test with password 'test' superuser@H_502_51@;
使用\du来查看当前pg中的用户
  
     
Role name Attributes Member of @H_502_51@-----------+------------------------------------------------------------+----------- brent @H_502_51@{} dsg Create DB postgres Superuser@H_502_51@,76)"> role DB Replication Bypass RLS suq test Superuser{}
用户的权限分为系统权限和对象权限
对象权限使用grant语句来赋予:
 grant selectupdateinsert on pg_catalog@H_502_51@.pg_roles to brent@H_502_51@;GRANT
而系统权限其实就是用户是否具有一些系统角色,可以使用alter语句来赋予,例如给brent加上replication的角色
 alter role brent  replicationALTER ROLE


@H_457_301@二.数据库
1.创建数据库
使用create database来创建数据库,在psql中使用\l来查看当前实例中包含哪些数据库,其中postgres和template0和template1为initdb的时候就系统创建的.
 \h create database Command CREATE DATABASEDescription create a  databaseSyntaxCREATE DATABASE name OWNER @H_502_51@[=] user_name  TEMPLATE  template ENCODING  encoding  LC_COLLATE  lc_collate  LC_CTYPE  lc_ctype  TABLESPACE  tablespace_name  ALLOW_CONNECTIONS  allowconn  CONNECTION LIMIT  connlimit  IS_TEMPLATE  istemplate  create database brent  owner@H_502_51@=suq CREATE DATABASE \l  List of databases Name Owner Encoding Collate Ctype Access privileges @H_502_51@-----------+----------+----------+---------+-------+----------------------- UTF8  C   template0 c@H_502_51@/postgres @H_502_51@+ postgres@H_502_51@=CTcpostgres template1 postgres
连接数据库可以使用\c DATABASENAME 或者在登录的时候直接指定登录哪个数据库
postgres@pg1 @H_502_51@~]$ psql brentpsql @H_502_51@(9.5@H_502_51@.1@H_502_51@)Type "help"for helpbrent \q$ psql \c brentYou are now connected to database "brent"as user "postgres"@H_502_51@.
使用alter database命令修改数据库
\h alter database Command ALTER DATABASEDescription change a databaseSyntaxALTER DATABASE name ALLOW_CONNECTIONS allowconn IS_TEMPLATE istemplateALTER DATABASE name RENAME TO new_nameALTER DATABASE name OWNER TO @H_502_51@{ new_owner CURRENT_USER SESSION_USER @H_502_51@}ALTER DATABASE name SET TABLESPACE new_tablespaceALTER DATABASE name SET configuration_parameter TO value DEFAULT ALTER DATABASE name SET configuration_parameter FROM CURRENTALTER DATABASE name RESET configuration_parameterALTER DATABASE name RESET ALL
可以修改最大连接数
alter database brent connection limit 10ALTER DATABASE
可以修改数据库
alter database brent rename to suqALTER DATABASE
删除数据库,使用drop database命令,当有人连接在数据库的时候是不能删除数据库的.

.模式
模式即schema,类似于oracle中schema,MysqL中的database概念,使用create schema来创建schema,一般我们的 schema和owner都设置为相同
suq \h create schemaCommand CREATE SCHEMADescription schemaSyntaxCREATE SCHEMA schema_name AUTHORIZATION role_specification schema_element CREATE SCHEMA AUTHORIZATION role_specification CREATE SCHEMA IF NOT EXISTS schema_name CREATE SCHEMA IF NOT EXISTS AUTHORIZATION role_specification role_specification can be GROUP user_name CURRENT_USER SESSION_USER
使用\n查看当前数据库下有哪些schema,public是创建database的时候系统生成的默认schema,类似于oracle中的public用户
create schema brent authorization suqCREATE SCHEMA \dn of schemas--------+---------- suqpublic postgres
使用drop schema来删除schema
drop schema brentDROP SCHEMA
使用alter schema来修改schema,例如修改schema的名字
alter schema brent rename to suq;ALTER SCHEMA postgres postgres
修改schema的所属主:
alter schema suq owner to suq suq
当连接到一个数据下的时候,创建表或者其它对象的时候一般都需要打上schema.name
或者使用修改搜索路径的方法,设置路径,类似于linux中设置PATH环境变量,当设置完成之后,所有的操作都默认
是在搜索路径下的schema执行,例如,当我们第一次登录到psql的时候,当前的search_path为登录public
此时使用\dt查看不到任何表
$ psql suq show search_path-# search_path @H_502_51@-----------------"$user"public1 row@H_502_51@) \dtNo relations found@H_502_51@.
设置完成search_path后,就可以在suq这个模式下查看到表名了:
set search_pathSET \dt of relations Schema Type--------+------+-------+---------- t1 table postgres

猜你在找的Postgre SQL相关文章