本文主要是在windows系统下用psql进行的。
注意:如果以缺省的用户postgres进入系统,为安全考虑,是不能执行某些操作的;如果要执行sql等一些操作,必须要以另外的用户进入才行。
一、进入Postgresql的命令
可以用安装目录下的/scripts中的runpslq.bat批处理文件进入。
三、改变当前数据库
\c 数据库名
四、新建一个数据库
create database 数据库名;
五、查看所有的用户
\du
六、新建用户
create user 用户名;
七、查看数据库中的表
\d
八、新建一个数据表
例如:
CREATE TABLE weather (
test(# city varchar(80),
test(# temp_lo int, -- 最低气温
test(# temp_hi int, -- 最高气温
test(# prcp real, -- 降水量
test(# date date
test(# );
九、显示表结构
\d 表名;
十、用户管理
1、建立一个带密码、有创建数据库权限的用户:create user username password 'password'createdb;
3、更改用户属性:alter user username [createdb] [nocreatedb] [createuser][nocreateuser] [in group groupname] [valid until 'month day year'],其中valid until 是设置有效期,格式是'月 日 年'。
十一、组的管理
和 Unix 里一样,组是一个逻辑上对用户分组,进而简化权限管理的方法∶ 权限可以赋予整个组,也可以对整个组撤除。
要创建一个组,使用CREATE GROUP name,
ALTER GROUP name ADD USER uname1,...
ALTER GROUP name DROP USER uname1,...
十二、用户、组及权限
1. 数据库用户
2. 用户属性
3. 组
4. 权限
5. 函数和触发器
每个数据库集群都包含一个数据库用户的集合。 这些用户是和那些在同一个服务器上运行的操作系统的用户相独立的。 用户拥有数据库对象(比如说,表)以及可以把这些对象的权限赋予 其它用户,这样就能控制谁可以访问哪些对象。
本章描述如何创建和管理用户,以及介绍权限系统。 有关各种类型的数据库对象和权限的效果可以在Postgresql 7.3 用户手册 中找到。
1. 数据库用户
数据库用户从概念上与操作系统用户是完全无关的. 在实际使用中把它们对应起来可能比较方便,但不是必须的。 数据库用户名在整个数据库集群中是全局的(而不是每个库不同)。
要创建一个用户,使用sql 命令 CREATE USER:CREATE USER name。 name 遵循 sql 标识的规则: 要么完全没有特殊字符,要么用双引号引起。要删除一个现有用户,使用类似的命令 DROP USER:DROP USER name
为了方便,shell 脚本createuser和 dropuser 提供了对了这些 sql 命令的封装。我们可以在 shell命令上直接调用它们:
createuser name
dropuser name
为了能初创数据库系统,新建立的数据库总是包含一个预定义的用户. 这个用户将有固定的 ID 1,并且缺省时(除非在运行 initdb 时更改过)他将和 初始化该数据库集群的用户有相同的名称。 通常,这个用户叫postgres. 为了创建更多用户,你必须首先以这个初始用户身份联接.
一个和数据库的活跃连接只能有一个用户身份进行。 和特定数据库联接的用户名是由初始化联接请求的应用以应用相关的方式声明的, 比如,psql 程序使用-U命令行选项声明它代表的进行联接 的用户。许多应用以当前操作系统的用户名为缺省(这样的应用包括 createuser 和 psql)。 这样我们就可以很方便地维护这两个用户集合之间地映射关系。
一个客户端联接可以用来联接的数据库用户集合是由客户 认证设置决定的,在 Chapter 4 里面有解释.(因此,一个客户端并不局限于以它的操作系统用户 同名的用户进行联接,就象你登录系统的名称不一定要是你的真实 名称一样.)因为用户地身份决定了一个已连接地客户端可用的权限, 所以在多用户环境里仔细配置这些内容是非常重要的。
2. 用户属性
一个数据库用户可以有一系列属性,这些属性定义他的权限,以及与 客户认证系统的交互。
superuser(超级用户)
数据库超级用户超越所有权限检查.同样,只有超级用户才能 创建新的用户.要创建数据库超级用户,用 CREATE USER name CREATEUSER。
database creation(创建数据库)
用户要想创建数据库,必须明确给出权限(对于超级用户是例外,因为 他们超越所有权限检查)。要创建这样的用户,用 CREATE USER name CREATEDB。
password(口令)
只有在对客户认证方法要求客户在与数据库建立连接是使用口令的时候,口令才比较重要。 password,md5,和 crypt 认证方法使用口令。 数据库口令与操作系统口令是无关的。在创建用户的时候 声明一个口令是这样: CREATE USER name PASSWORD 'string'。
一个用户的属性可以在创建后用 ALTER USER 修改. 参考 CREATE USER 和 ALTER USER 的手册获取细节。
一个用户也可以为许多运行时配置设置个人缺省, 那些配置在 Section 3.4 里描述。 比如,如果出于某种原因你想在所有你做的连接中关闭索引扫描(提示:不是个好主意), 你可以用ALTER USER myname SET enable_indexscan TO off;这样就会保存该设置(但是不是立即设置)并且在随后的连接中就好像 在会话开始之后都马上 SETenable_indexscan TO off;了一样。 你也可以在会话中修改这个设置;它只是缺省。要撤销任何这样的设置, 使用 ALTER USER username RESET varname;。
3. 组
和 Unix 里一样,组是一个逻辑上对用户分组,进而简化权限管理的方法∶ 权限可以赋予整个组,也可以对整个组撤除。
要创建一个组,使用
CREATE GROUP name
要向组中增加用户或删除用户,用
ALTER GROUP name ADD USER uname1,...
ALTER GROUP name DROP USER uname1,...
4. 权限
当创建一个数据库对象时,它属于一个用户.该用户就是执行创建 命令的那位.要改变一个表,索引,序列,或者视图的所有者,使用 ALTER TABLE 命令。 缺省时,只有所有者(或者超级用户)可以对该对象做任何事情.为了 让别的用户也能用它,必须赋予那些用户权限。
我们有以下几种权限:SELECT(读), INSERT(追加), UPDATE(写),DELETE, RULE(规则),REFERENCES(外键), TRIGGER, CREATE,TEMPORARY,EXECUTE, USAGE,和 ALL PRIVILEGES。 有关Postgresql所支持的权限的更多信息,请 参阅 Postgresql 参考手册 里面的 GRANT 页获取更多详细的信息。修改或者删除一个对象的权限总是只有该对象的所有者才有. 要赋予权限,必需使用 GRANT 命令。要赋权限,用GRANT命令。因此,如果 joe 是一个现存用户,而 accounts是一个现存表,那么可以这样赋予
更新权限
GRANT UPDATE ON accounts TO joe;
执行这条命令的用户必须是表的所有者。要给一个组赋权限,用
GRANT SELECT ON accounts TO GROUP staff;
特殊的"用户"名 PUBLIC可以用于 给系统中的每一个用户赋权限.写 ALL 在 权限声明位置上表明赋予所有权限。
要废除一个权限,用 REVOKE 命令:
REVOKE ALL ON accounts FROM PUBLIC;
表所有者的特殊权限(也就是说,做 DROP,GRANT, REVOKE 等等的权限)总是隐含给所有者的,并且不能赋予或者删除。 但是表所有者可以废除他的普通权限,比如给自己做一个只读的表,就象给 别人做一样。
十三、客户端psql的操作
*查看Postgresql的系统表:(摸索/查找中)
*终端登录:
psql -l[主机名/IP] -d[数据库名] -U[用户名]
*连接到另外一个数据库:
/c [数据库名]
*断开终端:
/q
========================================
[基本用户管理]==========================
*添加用户:
create user [用户名];
*修改用户密码:
alter user [用户名] with password [口令];
*删除用户:
drop user [用户名];
*查看用户信息:
(摸索/查找中)
========================================
[基本数据库操作]========================
*创建数据库:
create database [数据库名];
*查看数据库列表:
/d
*删除数据库:
drop database [数据库名];
*修改数据库的所有者:
(摸索/查找中)
========================================
[数据库内基本操作]======================
*给予某用户在某数据库创建表的授权:
(摸索/查找中)
*收回某用户在某数据库创建表的授权:
(摸索/查找中)
创建表:
create table ([字段名1] [类型1] <references 关联表名(关联的字段名)>,[字段名2] [类型2],......<,primary key (字段名m,字段名n,...)>);
*查看表名列表:
/d
*查看某个表的状况:
/d [表名]
*重命名一个表:
alter table [表名A] rename to [表名B];
*修改表的所有者:
(摸索/查找中)
*删除一个表:
drop table [表名];
========================================
[表内基本操作]==========================
*在已有的表里添加字段:
alter table [表名] add column [字段名] [类型];
*删除表中的字段:
alter table [表名] drop column [字段名];
*重命名一个字段:
alter table [表名] rename column [字段名A] to [字段名B];
*给一个字段设置缺省值:
alter table [表名] alter column [字段名] set default [新的默认值];
*去除缺省值:
alter table [表名] alter column [字段名] drop default;
*将已存在的表里某列设置为主码:
(摸索/查找中)
*将已存在的表里某几列设置为主码:
(摸索/查找中)
*取消某列的主码资格:
(摸索/查找中)
在表中插入数据:
insert into 表名 ([字段名m],[字段名n],......) values ([列m的值],[列n的值],......);
修改表中的某行某列的数据:
update [表名] set [目标字段名]=[目标值] where [该行特征];
删除表中某行数据:
delete from [表名] where [该行特征];
delete from [表名];--删空整个表
========================================
[备份]==================================
备份一个数据库:
pg_dump 数据库名 > 备份文件
把备份文件导回原数据库或导入新数据库:
cat 备份文件 | psql 数据库名
最好先把这个数据库的认证改为"trust"。
备份一个表:
pg_dump -t table1 dbname > bk1.sql
========================================
ADD
需要为 psql 程序带入参数:psql -d databasename -U username -W。-d 用来指定数据库,-U 指定用户名,而 -W 要求 psql 提示你输入一个口令。当你成功地运行了 psql 以后,将每个 CREATE TABLE 查询单独地粘贴到 psql 中并按回车键。如果在你的 sql 语句中有错误,psql 会给出相应提示。通过逐一地加入每一个表,你会得到每一个表的调试信息,这样做起来相当简单。