1. 前言

以前只用过数据库MySQL和Rails自带的sqlite3, 最近打算在一个项目里使用postgreSQL, 简要记录下。

2. 安装

官网找对应版本下载, 不喜欢exe文件,感觉不在可控范围内, 于是下载了zip版本

解压之后, 设置路径:

path = %path%;D:\Programs\pgsql\bin
set pghost=localhost
set pglib=D:\Programs\pgsql\lib
set pgdata=D:\Programs\pgsql\data

在解压目录下

mkdir data
cd data
initdb .

成功之后console会显示:

WARNING: enabling “trust” authentication for local connections. You can change this by editing pg_hba.conf or using the option -A, or –auth-local and –auth-host, the next time you run initdb.

Success.

You can now start the database server using: “pg_ctl” -D “.” -l logfile start

按照提示,pg_ctl.exe -D . -l logfile start, 显示 “server starting”, 若要停止, pg_ctl.exe -D . stop
注意若不在安装目录下, 则将上述 . 改为data的绝对/相对路径

3. 注册为Windows服务

pg_ctl.exe register -N postgreSQL -D .
注册成为服务后, net start postgreSQL即可

4. 用户权限

之后运行postgres.exe会告诉你不能使用管理员权限登录, 故:

net user postgres your_password /add
runas /user:postgres cmd.exe    # 我用的是cmder.exe

之后可以通过whoami查询运行该程序的当前用户

5. 目录设置

再次运行 postgres.exe, 发现提示You must specify the –config-file or -D invocation option or set the PGDATA environment variable.
再次set pgdata=D:\Programs\pgsql\data

6. 用户不存在

提示此错误, role "postgres" does not exist, 因为我们最开始initdb是在默认账户下,应当runas postgres之后再initdb

7. 运行

重启一下服务, 运行psql.exe即可
或者不启动服务,直接postgres.exe, 再另开一个窗口执行psql.exe, 执行?可以得到帮助

8. 操作

注意windows下大多数操作关键字前面都有”"
之后查看文档, 运行一些操作, 如:

CREATE database hlademo;  # 创建数据库, 或使用createdb命令
\l                        # 列出所有数据库
\c hlademo;               # 连接到数据库
DROP DATABASE [ IF EXISTS ] hlademo;  # 删除数据库,也可以使用dropdb
 
create table tank(
  ID INT PRIMARY KEY NOT NULL,
  NAME TEXT NOT NULL,
  time TEXT
);                        # 创建表
DROP TABLE tank;          # 删除表
INSERT INTO tank(ID,name,time) VALUES(1, 'apollo', '20160323'); # 插入, 注意用单引号
select * from tank;       # 查询表

9. 其他命令

模式(schema)实际上一个命名表的集合。也可以包含一个schema视图、索引、序列、数据类型、运算符和函数。Schema是满足类似于在操作系统级别的目录,但该模式不能嵌套。CREATE SCHEMA PostgreSQL语句创建一个模式(schema)

create schema enemy;
create table enemy.missile (
  ID INT PRIMARY KEY NOT NULL,
  NAME TEXT NOT NULL,
  time TEXT
);
select * from enemy.missile;

10. 修改密码

su - postgres -c psql
ALTER USER "user_name" WITH PASSWORD 'new_password'