[数据库]postgresql安装并启动

mac

一、检查

ps auxwww | grep postgres
brew info postgresql

二、mac安装postgresql并启动

在 mac 下,可以利用 homebrew 直接安装 PostgreSQL:

brew install postgresql -v

稍等片刻,PostgreSQL 就安装完成。安装会自动初始化数据库,初始配置 PostgreSQL:

# This formula has created a default database cluster with:
  initdb --locale=C -E UTF-8 /usr/local/var/postgres

上面指定 “/usr/local/var/postgres” 为 PostgreSQL 的配置数据存放目录,并且设置数据库数据编码是 utf8,更多配置信息可以 “initdb --help” 查看。

三、启动重启

# To restart postgresql after an upgrade:
  brew services restart postgresql
# Or, if you don't want/need a background service you can just run:
  /usr/local/opt/postgresql/bin/postgres -D /usr/local/var/postgres

设成开机启动 PostgreSQL:

ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

一般默认已经创建好了postgres用户,密码为空

psql -U postgres  

Ubuntu

安装

# 添加 Postgresql 源到系统源
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

# 添加签名密钥
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

# 更新软件包列表
# 在此之前可以先将软件源更换为国内的软件源
sudo apt-get update

# 安装最新版本
sudo apt-get -y install postgresql # postgresql就是服务端,apt install postgresql-client是客户端
# 指定版本
sudo apt-get install postgresql-12
# 相应扩展,安装这个contrib 才可以使用 uuid 等函数.
# sudo apt-get install postgresql-contrib  # 会安装最新版本postgresql  postgresql-client 要注意
  • 在初次安装完成后,pg默认已经进行了如下的操作:创建了一个名为postgres的数据库用户和一个名为postgres的数据库,同时还创建了一个名为postgres的linux系统用户。实际上,这里创建的postgres数据库用户拥有超级管理员身份,可以访问我们后面所创建的所有数据库,同时可以进行创建新数据库用户和修改用户密码等操作。

修改linux用户postgres密码

# 清除密码
sudo passwd -d postgres
# 设置密码
sudo -u postgres passwd
# Enter new UNIX password: 
# Retype new UNIX password: 
# passwd: password updated successfully

启动

状态  sudo  service postgresql status
启动  sudo  service postgresql start
停止  sudo  service postgresql stop
重启  sudo  service postgresql restart

状态 sudo /etc/init.d/postgresql status
启动 sudo /etc/init.d/postgresql start
停止 sudo /etc/init.d/postgresql stop
重启 sudo /etc/init.d/postgresql restart

查看版本

# 命令行查看
psql --version
pg_config | grep VERSION
# 登录数据库 sudo -u postgres psql 
show server_version;

登录

sudo -u postgres psql
  • 这条命令表示linux用户postgres以数据库超级用户postgres的身份登录了名为postgres的数据库,因为是ubuntu系统,所以默认这个时候是不需要输入密码的,直接进入了pg的控制台

设置postgres用户密码

# 登录后
ALTER USER postgres WITH PASSWORD '1qaz2wsx'; 
# 或者
\password postgres  # 然后输入两次密码

开启远程连接

vim /etc/postgresql/12/main/postgresql.conf

#listen_addresses = 'localhost' 改为 listen_addresses = '*'
# Listen on all interfaces
#listen_addresses = 'localhost' 改为 listen_addresses = '*'
listen_addresses = '*'

# Listen on specified private IP address
listen_addresses = '192.168.10.11'

修改pg_hba.conf 文件

vim /etc/postgresql/12/main/pg_hba.conf

在文档末尾加上以下内容
host   all      all       0.0.0.0/0    md5
host   all      all       0.0.0.0/0    trust


#配置192.168.88.0网段的所有主机均可访问,24为子网掩码
host    all    all        192.168.88.0/24        md5
#测试环境不要求严格权限是可像如下配置
host    all       all       0.0.0.0/0            trust
  • 错误 FATAL: Peer authentication failed for user “postgres”
vim /etc/postgresql/12/main/pg_hba.conf

local   all             postgres             peer
# 改成
local   all             postgres             md5

然后重启 sudo service postgresql restart

开启防火墙

查看状态:sudo ufw status
允许指定ip:sudo ufw allow from 192.168.1.1
或者开放端口:sudo ufw allow 2021

重启:sudo ufw reload

总结

psql -U postgres -h 192.168.1.107 -p 5432 -d postgres
psql -U postgres -h localhost -p 5432 -d octa_cis

-U username为数据库用户
-h 数据库地址 如果为localhost 可省略
-p 端口 默认5432可省略
-d 数据库库名
创建用户 create user zhangsan with password ‘1qaz2wsx’;
授权 GRANT ALL PRIVILEGES ON DATABASE mydatabase to zhangsan;
添加角色 ALTER ROLE zhangsan WITH SUPERUSER;
切换用户 su postgres
链接pgsql psql -U postgres
添加密码 ALTER USER postgres WITH PASSWORD1qaz2wsx’;
查看用户 select * from pg_shadow;
创建表 CREATE DATABASE test WITH OWNER = postgres ENCODING =UTF8;
查看所有数据库: select * from pg_database;
选择库 \c database;

查看客户端版本 psql --version 查看服务器版本 postgres=# show server_version;
查看详细信息 postgres=# select version();

基本操作

  • 创建一个 PostgreSQL 用户
    因为postgers用户具有很高的权限,通常我们不会直接以这个身份登录,而是会另外创建一个新用户
# 登录后操作
create user username with password 'password';
# 或
createuser username -P
#Enter password for new role:
#Enter it again:

上面的 username 是用户名,回车输入 2 次用户密码后即用户创建完成。

  • 创建数据库
create database dbname owner username;
# 或者
createdb dbname -O username -E UTF8 -e
# 创建了一个名为 dbname 的数据库,并指定 username 为改数据库的拥有者(owner),数据库的编码(encoding)是 UTF8,参数 "-e" 是指把数据库执行操作的命令显示出来。
  • 用户和库授权
GRANT ALL PRIVILEGES ON DATABASE dbname to username;
# 要给用户添加角色 
ALTER ROLE username WITH SUPERUSER;

连接数据库

psql -U username -d dbname -h 127.0.0.1
psql -U postgres -h 218.28.7.253 -p 8001 -d postgres

PostgreSQL 数据库操作

显示已创建的数据库:

\l 

在不连接进 PostgreSQL 数据库的情况下,也可以在终端上查看显示已创建的列表:

psql -l

连接数据库

\c dbname

显示数据库表

\d  

创建一个名为 test 的表

CREATE TABLE test(id int, text VARCHAR(50));

插入一条记录

INSERT INTO test(id, text) VALUES(1, 'sdfsfsfsdfsdfdf');

查询记录

SELECT * FROM test WHERE id = 1;

更新记录

UPDATE test SET text = 'aaaaaaaaaaaaa' WHERE id = 1;

删除指定的记录

DELETE FROM test WHERE id = 1;

删除表

DROP TABLE test;

删除数据库

DROP DATABASE dbname;

或者利用 dropdb 指令,在终端上删除数据库

dropdb -U user dbname

五、一些问题

  1. 在进行数据库记录的迁移和复制数据后容易出现错误
DETAIL:  Key (id)=(1) already exists.
  • 解决方法:
select setval('tablename_id_seq', max(id)) from tablename;
  • rails批量解决
#rails c 里边执行
(ActiveRecord::Base.connection.tables - ['schema_migrations', 'ar_internal_metadata']).each do |tablename|
	User.find_by_sql("select setval('#{tablename}_id_seq', max(id)) from #{tablename};")
end

你可能感兴趣的:(数据库,postgresql,数据库,macos)