http://rongjih.blog.163.com/blog/static/33574461201110300454392/
1) 数据库的命令行管理脚本
如 =>
CREATE DATABASE
testdb
WITH ENCODING
'utf8'
OWNER test;
另外默认情况下是根据模板template1创建的数据库(表空间为pg_default),如果要创建一个真正空白的数据库,可以改用模板
template0,因为
template1在数据库安装后是允许维护修改的,而
template0则在数据库安装初始化后一直保持不变的。特别是在使用pg_dump 命令备份的数据库进行恢复时,使用模板
template0创建一个空白的数据库,然后再恢复备份信息到这个数据库,就可以避免不必要的对象冲突。
查看已经创建的数据库的列表信息:=> \l 或 =>select datname from pg_database;
=>
DROP DATABASE数据库名;
1-3) 用户权限管理
创建角色:=> create role 角色名;
查看已存在的角色:=> \du 或 select rolname from pg_roles;
创建组(常用于某些用户的权限管理):=>CREATE ROLE group_role NOINHERIT;
将表的select权限分配给用户:=>GRANT SELECT ON [表名] TO [用户名];
有以下几种权限:SELECT(读), INSERT(追加), UPDATE(写),DELETE, RULE(规则),REFERENCES(外键), TRIGGER, CREATE,TEMPORARY,EXECUTE, USAGE,和 ALL PRIVILEGES。
alter default privileges的使用
b)
收回授予的默认权限:alter default privileges for user
【用户1】in schema public revoke select on tables from
【用户2】;
c) 查看alter default privileges权限的方法是使用 # /ddp;
总结:alter default privileges并不会改变已有用户的权限,只有在有对象创建时,才会根据alter default privileges定义的情况给指定的用户加权限,这个语句有点象是在建对象时加了一个权限触发器。
1-4) 关于表空间
创建一个新的表空间:=>CREATE TABLESPACE fastspace LOCATION '/mnt/sda1/postgresql/data';
注:所指定的表空间路径必须存在、为空及为Postgresql系统帐号的拥有者。
查看现有的表空间信息:=> \db 或 => select spcname from pg_tablespace;
设置默认的表空间:=>
SET default_tablespace = space1;
将表创建到指定的表空间:=> CREATE TABLE foo(i int) TABLESPACE space1;
更多:
2) 数据表维护脚本
2-2) 删除列:ALTER TABLE bs_case_advice
DROP COLUMNis_invalid;
2-4) 修改列类型:ALTER TABLE bs_case_advice ALTER COLUMN is_invalid
TYPEboolean;
2-5) 修改列默认值:ALTER TABLE bs_case_advice ALTER COLUMN is_invalid
SET DEFAULTfalse;
) sql注意事项
2-1) 使用 select distinct ... order by aa时,order by后的字段必须在select的字段中包含,否则报错
如 t.name name、t.type type会报错,改为t.name as name、t.type as type就不会报错了
2-3) 使用hibernate时,如果domain字段的类型为boolean,数据库字段也必须用boolean,不能用integer代替,如
"INNER_ boolean not null default false,"
-)查看客户端编码:=> \encoding
-)替换bytea字段内的部分值:
update act_ge_bytearray set bytes_ = overlay(bytes_ placing E'2013-04-25'::bytea from position(E'2013-03-25'::bytea in bytes_))
where id_ in ('398416','398420');
-)转换数据类型:select cast(id as varchar(255)),... from ... (id原为int类型,这里将其转换为varchar类型)
-)数字格式化:to_char(16.5,'FM99D0') -> 16.5,to_char(16,'FM999D0') -> 16.0
-)构建1-12的连续数据:select * from generate_series(1,12) order by 1 或 使用递归
WITH RECURSIVE T(N) AS (
VALUES (1)
UNION ALL
SELECT N+1 FROM T WHERE N < 12
) SELECT N FROM T;
-)数组转为行:SELECT UNNEST(ARRAY['a','b','c','d']) AS names
-) 触发器函数里的几个特殊变量:
http://www.php100.com/manual/PostgreSQL8/plpgsql-trigger.html
Disqus 评论设计(一个递归例子) 2)返回第一个非空值:selectCOALESCE(value [,...])