PostgreSQL安装和使用
postgresql安装 window
一、安装
1.下载postgresql安装包。
(1)下载地址:官网下载地址
(2)开始安装
- ① 双击下载的安装包
- ②选择程序安装目录
- ③选择数据存放目录
- ④输入用户的密码(要记住)
- ⑤设置服务监听端口,默认为5432
- ⑥选择运行时语言环境
(注:选择数据库存储区域的运行时语言环境(字符编码格式)。
在选择语言环境时,若选择"default locale"会导致安装不正确;同时,PostgreSQL 不支持 GBK 和 GB18030 作为字符集,如果选择其它四个中文字符集:中文繁体 香港(Chinese[Traditional], Hong Kong S.A.R.)、中文简体 新加坡(Chinese[Simplified], Singapore)、中文繁体 台湾(Chinese[Traditional], Taiwan)和中文繁体 澳门(Chinese[Traditional], Marco S.A.R.),会导致查询结果和排序效果不正确。建议选择"C",即不使用区域。
----我选择了default localt,安装正确;建议选择default localt。) - ⑦直到最后安装结束,去掉勾选,直接点 Finish
二、初始化配置
- ①首先cmd打开一个命令窗口
键入(参照自己的文件路径,后续在在bin下执行)
cd E:PostgreSQL\bin - ②初始化数据库
initdb -D E:\PostgreSQL\data -E UTF8
如果data目录存在,可以先删除,再重新键入上面语句;也可以直接忽略此步骤 - ③注册服务
即将postgres注册为服务,服务名为pgsql
继续键入:
pg_ctl register -D E:\software\postgresql\data -N pgsql - ④启动服务,另开一个cmd输入net start pgsql
会显示启动成功
后续启动服务可以直接这样造作(成功的话任务管理器的服务下也会出现该服务名称的)
三、启动
打开 pgAdmin 4(在开始菜单里直接找即可)
pgAdmin 主页如下:
点击左侧的 Servers
首次进入一般需要输入密码(安装时设置的那个密码),点击 OK 即可
最终连接成功后打开的界面:
登录
一、在默认配置条件下,本机访问PostgreSQL
切换到Linux用户postgres,然后执行psql:
$ su - postgres
Last login: Wed Mar 1 13:16:48 CST 2017 on pts/1
-bash-4.2$ psql
psql (9.2.18)
Type “help” for help.
postgres=#
此时就在数据库postgres中了。
使用 psql -d [databasename] 可登录其他数据库。
注意:执行psql命令时,必须确认已配置postgresql的环境变量。
二、创建新用户来访问PostgreSQL
1、如上所述,先切换到Linux用户postgres,并执行psql:
$ su - postgres
-bash-4.2$ psql
postgres=#
现在位于数据库提示符下。
2、创建数据库新用户,如 dbuser:
postgres=# CREATE USER dbuser WITH PASSWORD '*****';
注意:
- 语句要以分号结尾。
- 密码要用单引号括起来。
3、创建用户数据库,如exampledb:
postgres=# CREATE DATABASE exampledb OWNER dbuser;
4、将exampledb数据库的所有权限都赋予dbuser:
postgres=# GRANT ALL PRIVILEGES ON DATABASE exampledb TO dbuser;
5、使用命令 \q 退出psql:
postgres=# \q
6、创建Linux普通用户,与刚才新建的数据库用户同名,如 dbuser:
$ sudo adduser dbuser
$ sudo passwd dbuser
7、以dbuser的身份连接数据库exampledb:
$ su - dbuser
Password:
Last login: Wed Mar 1 11:52:07 CST 2017 on pts/
[dbuser@master ~]$ *psql -d exampledb*
三、最简单的做法
以你的普通Linux用户名,在数据库中创建同名的用户和数据库,如xxf,然后就可以本机直接连接到数据库xxf了。
~> su - postgres
Password:
Last login: Wed Mar 1 13:19:02 CST 2017 on pts/1
-bash-4.2$ psql
psql (9.2.18)
Type “help” for help.
postgres=# create user xxf with password ‘****’;
CREATE ROLE
postgres=# create database xxf owner xxf;
CREATE DATABASE
postgres=# grant all privileges on database xxf to xxf;
GRANT
postgres=# \q
-bash-4.2$ exit
logout
~> *psql*
psql (9.2.18)
Type “help” for help.
xxf=>
至此,就在数据库xxf中了。
四、开启远程访问
1、编辑配置文件
文件:postgresql.conf
位置:/var/lib/pgsql/data/postgresql.conf
添加/修改:在所有IP地址上监听,从而允许远程连接到数据库服务器:
listening_address: ‘*’
文件:pg_hba.conf
位置:/var/lib/pgsql/data/pg_hba.conf
添加/修改:允许任意用户从任意机器上以密码方式访问数据库,把下行添加为第一条规则:
host all all 0.0.0.0/0 md5
2、重启数据库服务:
$ sudo systemctl restart postgresql
3、此后即可从其它机器上登录,例如用Navicat for PostgreSQL:
主机名或IP: 172...*
端口: 5432
初始数据库: xxf
用户: xxf
密码: ****** (数据库用户xxf的密码,不是Linux用户xxf的密码)
使用
PostgreSQL入门-安装与基本使用(Ubuntu)
PostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS),号称是 “世界上最先进的开源关系型数据库”。
PostgreSQL 是以加州大学计算机系开发的 POSTGRES 4.2版本为基础的对象关系型数据库。
今天在Ubuntu系统上,我们一起来安装并简单使用一下PostgreSQL数据库。
1.查看当前系统版本:
$ cat /etc/issue
Ubuntu 16.04.6 LTS \n \l
$ sudo lsb_release -a
LSB Version:
core-9.20160110
ubuntu0.2-amd64:core-9.20160110
ubuntu0.2-noarch:security-9.20160110
ubuntu0.2-amd64:security-9.20160110
ubuntu0.2-noarch
Distributor ID: Ubuntu
Description: Ubuntu 16.04.6 LTS
Release: 16.04
Codename: xenial
系统是 Ubuntu 16.04.6 LTS。
2.安装 PostgreSQL
$ sudo apt-get install postgresql
执行实例如下:
$ sudo apt-get install postgresql
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
libpq5
postgresql-9.5
postgresql-client-9.5
postgresql-client-common
postgresql-common
postgresql-contrib-9.5
ssl-cert
… …
Creating config file /etc/postgresql-common/createcluster.conf with new version
Creating config file /etc/logrotate.d/postgresql-common with new version
Building PostgreSQL dictionaries from installed myspell/hunspell packages...
Removing obsolete dictionary files:
Setting up postgresql-9.5 (9.5.19-0ubuntu0.16.04.1) ...
Creating new cluster 9.5/main ...
config /etc/postgresql/9.5/main
data /var/lib/postgresql/9.5/main
locale en_US.UTF-8
socket /var/run/postgresql
port 5432
update-alternatives: using /usr/share/postgresql/9.5/man/man1/postmaster.1.gz to provide /usr/share/man/man1/postmaster.1.gz (postmaster.1.gz) in auto mode
Setting up postgresql (9.5+173ubuntu0.2) ...
Setting up postgresql-contrib-9.5 (9.5.19-0ubuntu0.16.04.1) ...
Processing triggers for libc-bin (2.23-0ubuntu11) ...
Processing triggers for ureadahead (0.100.0-19.1) ...
Processing triggers for systemd (229-4ubuntu21.21) ...
默认已经安装了 postgresql 的服务器(postgresql-9.5)和客户端(postgresql-client-9.5)。
2019年10月03日,已经发布了PostgreSQL 12,如果想安装最新版的,需要更新一下源,参加 PostgreSQL Apt Repository
可以使用 psql --version
来查看当前安装的版本:
$ psql --version
psql (PostgreSQL) 9.5.19
安装后会默认生成一个名为 postgres
的数据库和一个名为postgres
的数据库用户。
同时还生成了一个名为 postgres
的 Linux 系统用户。
可以使用以下命令查看:
#查看用户
$ cat /etc/passwd
#查看用户组
$ cat /etc/group
3.使用PostgreSQL控制台修改 postgres 数据库用户密码
默认生成的 postgres 的数据库用户没有密码,现在我们使用 postgres Linux用户的身份来登录到管理控制台中。
# 切换到postgres用户。
$ sudo su - postgres
postgres@iZm5e8p54dk31rre6t96xuZ:~$
postgres@iZm5e8p54dk31rre6t96xuZ:~$ whoami
postgres
Linux 用户 postgres 以同名的 postgres 数据库用户的身份登录,不用输入密码的。
postgres@iZm5e8p54dk31rre6t96xuZ:~$ psql
psql (9.5.19)
Type "help" for help.
postgres=#
使用 \password
命令,为 postgres
用户设置一个密码
postgres=#
postgres=# CREATE USER db_user WITH PASSWORD 'PWD123456';
CREATE ROLE
postgres=#
创建用户数据库,这里为testdb,并指定所有者为db_user。
postgres=# CREATE DATABASE testdb OWNER db_user;
CREATE DATABASE
postgres=#
将 testdb 数据库的所有权限都赋予 db_user 数据库用户, 否则 db_user 只能登录控制台,没有数据库操作权限。
postgres=# GRANT ALL PRIVILEGES ON DATABASE testdb TO db_user;
GRANT
使用 \du
查看当前的数据库用户:
postgres=# \du;
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------+-----------
db_user | | {}
postgres | Superuser,Create role,Create DB,Replication,Bypass RLS | {}
最后,使用 \q
命令退出控制台, 并使用 exit
命令退出当前 db_user
Linux用户。
postgres=# \q
postgres@iZm5e8p54dk31rre6t96xuZ:~$
postgres@iZm5e8p54dk31rre6t96xuZ:~$ exit
logout
4.数据库基本操作实例
创建数据库与删除数据库:
# 创建数据库
postgres=# CREATE DATABASE lusiadas;
CREATE DATABASE
# 删除数据库
postgres=# DROP DATABASE lusiadas;
DROP DATABASE
使用 \c
切换数据库:
postgres=# CREATE DATABASE testdb;
CREATE DATABASE
postgres=# \c testdb;
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
You are now connected to database "testdb" as user "postgres".
新建表与删除表:
# 创建一个表 tb_test:(两个字段,其中id 为自增ID)
testdb=> CREATE TABLE tb_test(id bigserial, name VARCHAR(20));
CREATE TABLE
# 删除一个表 tb_test
testdb=> DROP table tb_test;
DROP TABLE
增删改查操作:
# 创建一个用户表 tb_users(三个字段,其中id 为自增ID)
testdb=> CREATE TABLE tb_users(id bigserial, age INT DEFAULT 0, name VARCHAR(20));
CREATE TABLE
# 使用 INSERT 语句插入数据
testdb=> INSERT INTO tb_users(name, age) VALUES('张三丰', 212);
INSERT 0 1
testdb=> INSERT INTO tb_users(name, age) VALUES('李四光', 83);
INSERT 0 1
testdb=> INSERT INTO tb_users(name, age) VALUES('王重阳', 58);
INSERT 0 1
# 查询数据
testdb=> select * from tb_users;
id | age | name
----+-----+--------
1 | 212 | 张三丰
2 | 83 | 李四光
3 | 58 | 王重阳
(3 rows)
testdb=> select * from tb_users WHERE id=3;
id | age | name
----+-----+--------
3 | 58 | 王重阳
(1 row)
# 更新数据 (执行后输出更新的条数,第二次执行失败所以输出为`UPDATE 0`)
testdb=> UPDATE tb_users set name = '全真派王重阳' WHERE name = '王重阳';
UPDATE 1
testdb=> UPDATE tb_users set name = '全真派王重阳' WHERE name = '王重阳';
UPDATE 0
# 插入2条数据
testdb=> INSERT INTO tb_users(name, age) VALUES('赵四', 0);
INSERT 0 1
testdb=> INSERT INTO tb_users(name, age) VALUES('赵五娘', 0);
INSERT 0 1
# 模糊查询
testdb=> SELECT * FROM tb_users WHERE name LIKE '赵%';
id | age | name
----+-----+--------
4 | 0 | 赵五娘
5 | 0 | 赵四
(2 rows)
# 修改表结构: 新增字段
testdb=# ALTER TABLE tb_users ADD email VARCHAR(50);
ALTER TABLE
# 修改表结构: 修改字段
testdb=# ALTER TABLE tb_users ALTER COLUMN email TYPE VARCHAR(100);
ALTER TABLE
# 删除字段
testdb=# ALTER TABLE tb_users DROP COLUMN email;
ALTER TABLE
# 删除记录
testdb=> DELETE FROM tb_users WHERE id = 5;
DELETE 1
使用 pg_database_size() 查看数据库的大小:
testdb=# select pg_database_size('testdb');
pg_database_size
------------------
7991967
(1 row)
testdb=# select pg_size_pretty(pg_database_size('testdb'));
pg_size_pretty
----------------
7805 kB
(1 row)
5.PostgreSQL 的 timestamp 类型
查询 current_timestamp
testdb=# select current_timestamp;
current_timestamp
-------------------------------
2019-11-11 08:33:35.369887+00
(1 row)
使用 current_timestamp(0) 定义时间类型精度为0:(有时区)
testdb=# select current_timestamp(0);
current_timestamp
------------------------
2019-11-11 08:31:08+00
(1 row)
使用 current_timestamp(0) 定义时间类型精度为0:(去掉时区)
testdb=# select current_timestamp(0)::timestamp without time zone;
current_timestamp
---------------------
2019-11-11 08:31:20
(1 row)
testdb=# select cast (current_timestamp(0) as timestamp without time zone);
current_timestamp
---------------------
2019-11-11 08:32:26
(1 row)
时间戳:
testdb=# select extract(epoch from now());
date_part
------------------
1573461495.47821
(1 row)
设置数据库时区:
视图 pg_timezone_names 保存了所有可供选择的时区:
# 查看时区
select * from pg_timezone_names;
比如可以选择上海 Asia/Shanghai
或重庆 Asia/Chongqing
, 最简单的直接 PRC
:
testdb=# set time zone 'PRC';
SET
testdb=# show time zone;
TimeZone
----------
PRC
(1 row)
testdb=# SELECT LOCALTIMESTAMP(0);
localtimestamp
---------------------
2019-11-11 16:42:54
(1 row)
Reference
https://www.postgresql.org/docs/8.4/sql-altertable.html
http://www.ruanyifeng.com/blog/2013/12/getting_started_with_postgresql.html
[END]
- 点赞
- 收藏
- 关注作者
评论(0)