postgreSQL
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'