PostgreSQL Practice(1)

  1. 需求

用官方 API 保存个人微博的 timeline 到数据库,鉴于返回数据是 json,用支持 json 的 PG 是最方便的 2. 环境

Ubuntu 12.04.3 LTS 3. 安装 PG 9.3

Google postgresql 9.3 ppa 可以看到官方 wiki 有详细说明

 1 -- 添加 apt 源
 2    sudo add-apt-repository ppa:pitti/postgresql
 3    sudo apt-get update
 4    sudo apt-get upgrade
 5    sudo apt-get install postgresql-9.3 pgadmin3
 6    sudo apt-get install postgresql-server-dev-9.3
 7 
 8    -- 其他信息
 9    -- deb http://apt.postgresql.org/pub/repos/apt/ precise-pgdg main
10    -- 单独添加签名
11    wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
  1. SUPER 用户 管理

通过 APT 安装后,默认用户是 postgres

1 -- 切换到用户 postgres
2    sudo su - postgres
3 
4    -- 添加数据库
5    createdb sample
6 
7    --  用 SUPER 角色登录
8    psql
  1. 数据库与用户权限
1 -- 创建新用户 授予数据库权限
2    create user yoyo with password 'ppass';
3    grant all privileges on database sample to yoyo;
  1. 表、RULE

初期只需要维护一个只读,主键唯一的表

1 -- 建表
2    create table weibo_user (
3        id bigserial PRIMARY KEY,
4        screen_name varchar(30),
5        name varchar(30),
6        user_json json
7    );

在有主键约束的情况下,如果在不检查是否有重复的情况下需要忽略主键冲突的行,在 MySQL 可以通过 insert ignore into 但是 pg 不支持,但是可以通过为表新建一个 rule 来忽略冲突行

1 drop rule if exists "rule_insertignore_weibo_user" on "weibo_user";
2    create rule "rule_insertignore_weibo_user" as on INSERT TO "weibo_user"
3        where exists(select 1 from weibo_user
4            where uid=NEW.uid and id=NEW.id)
5        do instead nothing;
  1. 好了,用 pg 保存一段时间的数据再对其处理

Published: February 08 2014

blog comments powered by Disqus