postgresql 数据库的初始化,配置,备份和还原
创建database liaoxinxi@tbase /home/liaoxinxi/trunk $ createdb -e -E utf8 -O tbaseuser -U postgresql -T template0 tplbase -U postgresql是用户名,是需要的,否则就会用操作系统的用户名 -T template0采用模板0,创建数据库的过程就是复制数据库的过程,默认是template1,在template1的情况下,在创建数据后,在template1安装的东西会拷贝到根据template1创建的数据库,而template0则不存在这种情况,其实template0和1的内容是一样的。所以在psql恢复数据的时候很好。 CREATE DATABASE 实际上是通过拷贝一个现有的数据库进行工作的。 缺省时,它拷贝名字叫 template1 的标准系统数据库。 所以该数据库是创建新数据库的"模板"。如果你给 template1 增加对象,这些对象将被拷贝到随后创建的用户数据库中。 这样的行为允许节点对数据库中的标准套件进行修改。 比如,如果你把过程语言 PL/pgSQL 安装到 template1 里,那么你在创建用户数据库的时候它们就会自动可得,而不需要额外的动作。 配置数据库 $/etc/init.d/postgresql restart $psql tbase 直接进入tbase 1, listen_addresses = 'localhost' postgresql.conf 设置本地可tcp链接
2, /etc/postgresql/8.4/main/pg_hba.conf 设置可访问 local all postgres trust
进入数据库后 psql tbase password 设置数据库密码,我不知道在createdb使用的密码为什么不管用,一定得用这个才能链接上数据库
>>> db = psycopg2.connect(user='postgres',password='shengqi158',database='tbase',host='localhost') >>>
encoding
获取编码格式
当前client的编码
SHOW client_encoding; 对于一些已知的编码,在客户端和服务器端实现自动转码 c - newuserl来切换用户,- 表示数据库不变 c用于切换用户和数据库 du 列出用户,l列出数据库, d 回车将得到所有表 initdb 命令将会创建数据库族,--encoding=encoding指定服务端的编码,也可在创建数据库的时候指定encoding 如果服务器字符集是 SQL_ASCII, 服务器把字节值 0-127 的数值根据 ASCII 标准解析,而字节值未 128-255 的则当作未解析的字符,在大多数情况下,如果你使用了任何非 ASCII 数据,那么使用 SQL_ASCII 设置都是不明智的,因为 PostgreSQL 会无法帮助你转换或者校验非 ASCII 字符。就存在部分以16进制表示
对于服务器端采用utf8还是sql-ascii编码都不影响order by和like select name from student where name like '%sdu%'; 数据库备份还原命令 pg_dump -h 164.82.233.54 -U tbaseuser databasename > databasename.bak 恢复:pg_restore -h localhost -U tbaseuser -d databasename < databasename.bak -h 代表目标主机,localhost代表本地主机,-U 用户,-d数据库名 h alter table insert into init_cmd(cmd,check_type,platform_id) values('su - rootnpasswd','UNIX',5); insert into param(quote,display,type,"desc") values('apache_conf_path','apache配置文件路径','text','apache的配置路径'); desc关键字,加双引号,后边的值必须是单引号(有的时候) select * from pg_stat_activity;查看链接情况 alter database tbase RENAME TO tbase_ascii; alter table template add column industry character(10); Template Databasesliaoxinxi@tbase /home/liaoxinxi/trunk $ pg_dump -h localhost -U postgresql tbase > tbase.bak psql -d tbase -U tbaseuser -f tbase.bak pg_dump -h localhost -p 5432 -U tradesns -W -F c -b -v -f "/home/tradeworkwangbin/us2010.backup" us2010 pg_dump -h localhost -p 5432 -U tbaseuser tbase -F c -b -v -f tbase.bak pg_restore -h localhost -p 5432 -d tbase -U tbaseuser tbase.bak -F 压缩格式,c表示很灵活的格式 -b大对象,客户化格式的转储不是脚本,不能用于 psql http://www.cnblogs.com/wangbin/archive/2009/08/14/1546009.html 为了支持远程访问(默认关闭),必须在pg_hba.conf(/usr/bin/pgsql/data)添加 host all all 192.168.0.0/16 trust #该网段可信 然后在postgresql.conf添加listen_address = '*' 重启:pg_ctl restart -D /usr/bin/pgsql/data ps -elf|grep post netstat -anp|grep 5432 主键,外键,索引,唯一索引 主键,一个表的唯一标志,保证数据的唯一性,一般是让主键只干主键的事 外键,主要用于关联和限制,一般是外表的主键,也可以是unique约束,另外控制主表的插入,必须有相应的外键,另外外表的删除肯定会查询主表,如果还有的话是不能删除的,这就保证了依赖关系,但同时带来了效率的下降。 当一个表中引用另外一个表的主键时,这个时候这个主键就成了主表中的外键 数据库的约束有三种,实体完整性约束、参照完整性约束和用户自定义约束。 1.实体完整性约束指的是主键不能为空,如果主键为空了还怎么唯一标识一条记录。 2.参照完整性约束,即外键的约束,某一外键的值必须在它引用的主键字段中存在。如,学生表中专业编号属性的值,必须都存于专业信息表中的专业编号属性中。想一想也就明白了,一个学生(大学生)怎么可能属于一个不存在的专业。 3.用户自定义完整性约束,指的是一些用户自己设定的约束,例如字段是否可以为空,字段值的取值范围(如:人的性别只能取男、女) 创建表的时候就创建了索引,那个索引就是主键 索引的目的就是为了加快查询速度设立的 ALTER TABLE pc ADD CONSTRAINT fk_cpu_model on update cascade; 第一行是设置外键约束并命名,第二行则是设置本表的字段,第三行则是关联的外表的约束, ON UPDATE CASCADE; 即在主表更新时,子表(们)产生连锁更新动作,似乎有些人喜欢把这个叫“级联”操作。:) CASCADE 外,还有 RESTRICT(禁止主表变更)、SET NULL(子表相应字段设置为空) CREATE INDEX <索引的名字> ON tablename (列的列表);设置简单索引 CREATE UNIQUE INDEX <索引的名字> ON tablename (列的列表);设置为一索引,只出现一次,还有多列索引, ALTER TABLE people ADD INDEX fname_lname_age (firstname,lastname,age); 数据库中主键和外键的设计原则
复合主键常常导致不良的外键
postgres@liaoxinxi-ThinkPad-SL400:/usr/bin$ createdb -e -E 'utf8' -T template0 -U postgres -w -O postgres tbase ident 增加unique约束: tbase=# alter TABLE platform add constraint name_chk unique (name); 去除外键: tbase=# alter TABLE t_item DROP CONSTRAINT t_item_id_field_fkey; alter TABLE item ADD column user_id integer; http://man.ddvip.com/database/PostgreSQL80zhref/index.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |