在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
零、口令文件: 在给出其它PostgreSQL客户端命令之前,我们需要先介绍一下PostgreSQL中的口令文件。之所以在这里提前说明该文件,是因为我们在后面的示例代码中会大量应用该文件,从而保证我们的脚本能够自动化完成。换句话说,如果在客户端命令执行时没有提供该文件,PostgreSQL的所有客户端命令均会被口令输入提示中断。 复制代码 代码如下: hostname:port:database:username:password 以上数据是用冒号作为分隔符,总共分为五个字段,分别表示服务器主机名(IP)、服务器监听的端口号、登录访问的数据库名、登录用户名和密码,其中前四个字段都可以使用星号(*)来表示匹配任意值。见如下示例: 复制代码 代码如下: /> cat > .pgpass *:5432:postgres:postgres:123456 CTRL+D #.pgpass文件的权限必须为0600,从而防止任何全局或者同组的用户访问,否则这个文件将被忽略。 /> chmod 0600 .pgpass 在学习后面的客户端命令之前,我们需要根据自己的应用环境手工创建该文件,以便后面所有的示例代码都会用到该口令文件,这样它们就都可以以批处理的方式自动完成。 一、createdb: 创建一个新的PostgreSQL数据库。该命令的使用方式如下: 复制代码 代码如下: createdb [option...] [dbname] [description] 1. 命令行选项列表:
2. 应用示例: 复制代码 代码如下: #1. 以postgres的身份登录。(详情参照上面口令文件的内容) /> psql #2. 创建表空间。 postgres=# CREATE TABLESPACE my_tablespace LOCATION '/opt/PostgreSQL/9.1/mydata'; CREATE TABLESPACE #3. 创建新数据库的owner。 postgres=# CREATE ROLE myuser LOGIN PASSWORD '123456'; CREATE ROLE postgres=# \q #4. 创建新数据库,其中本次连接的登录用户为postgres,新数据库的owner为myuser,表空间为my_tablespace,新数据库名为mydatabase。 /> createdb -U postgres -O myuser -D my_tablespace -e mydatabase CREATE DATABASE mydatabase OWNER myuser TABLESPACE my_tablespace; #5. 重新登录,通过查询系统表查看该数据库是否创建成功,以及表空间和所有者是否一致。 /> psql postgres=# SELECT datname,rolname,spcname FROM pg_database db, pg_authid au, pg_tablespace ts WHERE datname = 'mydatabase' AND datdba = au.oid AND dattablespace = ts.oid; datname | rolname | spcname ------------+---------+--------------- mydatabase | myuser | my_tablespace (1 row) 二、dropdb: 删除一个现有PostgreSQL数据库。 复制代码 代码如下: dropdb [option...] dbname 1. 命令行选项列表:
2. 应用示例: 复制代码 代码如下: #以postgres的身份连接服务器,删除mydatabase数据库。 /> dropdb -U postgres -e mydatabase DROP DATABASE mydatabase; #通过查看系统表验证该数据库是否已经被删除。 /> psql postgres=# SELECT count(*) FROM pg_database WHERE datname = 'mydatabase'; count ------- 0 (1 row) 三、reindexdb: 为一个指定的PostgreSQL数据库重建索引。 复制代码 代码如下: reindexdb [connection-option...] [--table | -t table ] [--index | -i index ] [dbname] reindexdb [connection-option...] [--all | -a] reindexdb [connection-option...] [--system | -s] [dbname] 1. 命令行选项列表:
2. 应用示例: 复制代码 代码如下: #仅重建数据表testtable上的全部索引。 /> reindexdb -t testtable -e -U postgres postgres REINDEX TABLE testtable; #仅重建指定索引testtable_idx /> reindexdb -i testtable_idx -e -U postgres postgres REINDEX INDEX testtable_idx; #重建指定数据库mydatabase的全部索引。 /> reindexdb mydatabase 四、vacuumdb: 收集垃圾并且分析一个PostgreSQL数据库。 复制代码 代码如下: vacuumdb [-options] [--full | -f] [--verbose | -v] [--analyze | -z] [-t table [(column [,...])]] [dbname] vacuumdb [-options] [--all | -a] [--full | -f] [--verbose | -v] [--analyze | -z] 1. 命令行选项列表:
2. 应用示例: 复制代码 代码如下: #清理整个数据库mydatabase。 /> vacuumdb -e mydatabase VACUUM; #清理并分析postgres数据库中的testtable表。 /> vacuumdb -e --analyze --table 'testtable' postgres VACUUM ANALYZE testtable; #清理并分析postgres数据库中的testtable表的i字段。 /> vacuumdb -e --analyze -t 'testtable(i)' postgres VACUUM ANALYZE testtable(i); 五、createuser: 定义一个新的PostgreSQL用户帐户,需要说明的是只有超级用户或者是带有CREATEROLE权限的用户才可以执行该命令。如果希望创建的是超级用户,那么只能以超级用户的身份执行该命令,换句话说,带有CREATEROLE权限的普通用户无法创建超级用户。该命令的使用方式如下: 复制代码 代码如下: createuser [option...] [username] 1. 命令行选项列表:
2. 应用示例: 复制代码 代码如下: # 对于有些没有缺省设置的选项,如-(d/D)、-(s/S)和-(r/R),如果在命令行中没有直接指定,那么在执行该命令是将会给出提示信息。 # 需要注意的是该提示将会挂起自动化脚本,直到输入后命令才会继续执行。 /> createuser -U postgres myuser Shall the new role be a superuser? (y/n) n Shall the new role be allowed to create databases? (y/n) y Shall the new role be allowed to create more new roles? (y/n) n CREATE ROLE myuser NOSUPERUSER CREATEDB NOCREATEROLE INHERIT LOGIN; # 通过psql登录后查看系统视图,以验证该用户是否成功创建,以及新角色的权限是否正确。 /> psql postgres=# SELECT rolname,rolsuper,rolinherit,rolcreaterole,rolcreatedb,rolcanlogin FROM pg_roles WHERE rolname = 'myuser'; rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin ---------+----------+------------+---------------+-------------+------------- myuser | f | t | f | t | t (1 row) # 为了保证自动化脚本不会被该命令的提示挂起,我们需要在执行该命令时指定所有没有缺省值的选项。 /> createuser -U postgres -e -S -D -R myuser2 CREATE ROLE myuser2 NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN; # 我们可以在创建用户时即刻指定该用户的密码,该操作由-P选项完成,然而这样的用法一定会挂起自动化脚本, # 因此我们可以采用一种折中的办法,即在创建用户时不指定密码,在自动化脚本执行成功后再手工该用户的密码。 /> createuser -P -s -e myuser3 Enter password for new role: Enter it again: CREATE ROLE myuser3 PASSWORD 'md5fe54c4f3129f2a766f53e4f4c9d2a698' SUPERUSER CREATEDB CREATEROLE INHERIT LOGIN; 六、dropuser: 删除一个PostgreSQL用户帐户,需要说明的是只有超级用户或带有CREATEROLE权限的用户可以执行该命令,如果要删除超级用户,只能通过超级用户的身份执行该命令。该命令的使用方式如下: 复制代码 代码如下: dropuser [option...] [username] 1. 命令行选项列表:
2. 应用示例: 复制代码 代码如下: # 直接删除指定用户。 /> dropuser -e myuser3 DROP ROLE myuser3; # 在删除指定用户时,该命令会给出提示信息,以免误操作。 /> dropuser -e -i myuser2 Role "myuser2" will be permanently removed. Are you sure? (y/n) y DROP ROLE myuser2; |
请发表评论