文章目录

  • 0 前言
  • 安装postgresql
  • 安装psycopg2
  • 一些符合课程习惯的配置
  • 使用
  • 新建与加载数据库
  • sql
  • python + sql
  • 测试
  • 一些报错与之前使用postgres无用的记录
  • # could not change directory to "/home/ubuntu": Permission denied
  • 也可以进入到postgres这个用户的命令行
  • 和python的交互
  • 基本设置
  • Python代码执行并运行
  • 测试
  • 给postgres 权限?
  • 查报错,看看为啥

0 前言

postgresql的安装方式有很多种。

  1. 从源代码安装。这是3311推荐的安装做法,可以很方便地设置文件安装位置。Prac Exercise 02 PostgreSQL: a client-server RDBMS。但是这种做法更麻烦,使用的是集群的操作。
  2. 使用包管理器安装。本文是使用apt安装

安装postgresql

​三条指令,傻瓜式安装​

安装psycopg2

​必须先有postgresql,才能安装这个指令​

一些符合课程习惯的配置

  1. 默认的postgresql的用户名字叫​​postgres​​,这个用户权限有限,经常报错。一定要首先利用createuser 去创建一个新用户,用户名子和你自己的Linux系统用户名一致,并且给予超级权限,我的叫ubuntu。
  2. 此时,可以直接在ubuntu命令行界面下,使用各种psql的命令了。可以使用sudo -u ubuntu psql操作数据库了。 我在zsh里设置了alias,alias mysql=“sudo -u ubuntu psql”

使用

通过3311的考前模拟题来练习一下做题的各个过程。
整体这部分,只要使用老师的步骤,都没问题。
​​​关键真的是,需要创建一个和系统用户同名的数据库用户。​

新建与加载数据库

createdb footy
psql footy -f work/footy.dump
psql footy

sql

应用与测试

python + sql

测试

一些报错与之前使用postgres无用的记录

# could not change directory to “/home/ubuntu”: Permission denied

会报错,但不影响。
在腾讯云的正常ubuntu界面下:

sudo -u postgres dropdb imdb # 删除数据库
sudo -u postgres createdb imdb #创建数据库
bzcat imdb.dump.bz2 | sudo -u postgres psql imdb # 加载想要的数据
sudo -u postgres psql imdb # 大概某数据库的交互式界面,命令行使用 \q退出
#sudo -u postgres psql imdb -f ass1.sql # 使用-f,无法加载sql文件
sudo -u postgres psql imdb < ass1.sql # 使用重定向加载sql文件

可以通过加载sql,以及在交互式命令行写sql的方式使用起来。

也可以进入到postgres这个用户的命令行

# 法2  进命令行再操作。
sudo -i -u postgres
createdb imdb

和python的交互

基本设置

一开始会提示:​​psql: error: FATAL: Peer authentication failed for user “postgres”​​​ 权限不够:
修改这个文件里的权限,把peer改成了trust,trust > peer > md5, trust最松
​​​sudo vim /etc/postgresql/12/main/pg_hba.conf​

# Database administrative login by Unix domain socket
local all postgres trust

# TYPE DATABASE USER ADDRESS METHOD

# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all peer
host replication all 127.0.0.1/32 md5
host replication all ::1/128 md5

如果还不行,看看这两个链接:可以不用密码登录
​​ https://gabrielinnocentrockerfeller.medium.com/how-to-fix-fatal-password-authentication-failed-for-user-postgres-in-ubuntu-20-4-f7c6d2856fc9​​

​https://stackoverflow.com/questions/21483540/postgres-password-authentication-issue​

Python代码执行并运行

import sys
import psycopg2





try:
hostname = 'localhost'
port_id = 5432
db = psycopg2.connect(database="imdb",
user="postgres",
password="postgres",
host = hostname,
port = port_id ) # postgres

# db = psycopg2.connect("dbname=imdb")
# ... add your code here ...
cur = db.cursor()
cur.execute(query)
tables = cur.fetchall()

except psycopg2.Error as err:
print("DB error: ", err)
finally:
if db:
db.close()
# print(type(tables))

测试

测试的时候,如何能够自由创建文件,并且进行文件的比对。
​​​sudo -u postgres 'sh' 'check' 'q1'​