postgresql 实践

1. 环境搭建

参考:http://www.lvesu.com/blog/main/cms-532.html

1.1. 安装依赖

# 需要安装 postgresql-devel 插件
yum install postgresql-devel*
# 安装 pg 和 py 的驱动:
# Debian系:
apt-get install libpq-dev python-dev
# RedHat系:
yum install libpqxx-devel python-devel# 安装完成,再使用
pip install psycopg2

1.2. 安装postgres(包含 psql)

sudo apt-get -y install postgresql
# 启动服务
systemctl start postgresql.service
systemctl restart postgresql

1.3. 登录

1.3.1. 修改linux系统postgres用户的密码

PostgreSQL 都会创建一个默认的 linux 用户 postgres,修改该用户密码的方法如下:

  1. 先删除用户 postgres 的历史密码
sudo  passwd -d postgres
  1. 重新设置用户postgres的密码
sudo -u postgres passwd

按照系统提示,输入两次新的密码,即可搞定。

1.3.2. 修改用户postgres的密码

PostgreSQL 数据库默认创建管理员账号:postgres;修改其密码,仅需一下三步:

  1. 首先,登录PostgreSQL
sudo -u postgres psql postgres -p 5432
  1. 然后,修改账号 postgres 的密码
ALTER USER postgres WITH PASSWORD 'Lpf65BsDhDNdaJmH';
  1. 最后,退出 pgsql 客户端

2. 数据库操作

2.1. 创建数据库

# 登录
psql -U postgres
# 执行sql
CREATE DATABASE manage;
# 查询
postgres=# \l;
# 选择数据库
postgres=# \c manage;
# 删除数据库
DROP DATABASE [ IF EXISTS ] name
DROP DATABASE IF EXISTS mydb;

2.2. 创建表

postgres=# CREATE TABLE questions(question_id varchar(32) PRIMARY KEY     NOT NULL,question_text      varchar(128)    NOT NULL,category      varchar(32)     NOT NULL,task_id varchar(32)      NOT NULL
);postgres=# CREATE TABLE answers(answer_id varchar(32) PRIMARY KEY     NOT NULL,answer_text      varchar(128)    NOT NULL,question_id varchar(32)      NOT NULL,model_id varchar(32)      NOT NULL,task_id varchar(32)      NOT NULL,score INT
);
# 查看所有表
postgres=# \dt
# 查看指定表,显示表信息
postgres=# \d answers# 删除表
DROP TABLE [ IF EXISTS ] name
DROP TABLE IF EXISTS answers;

2.3. 多表查询

https://blog.csdn.net/weixin_67588007/article/details/124832788

2.3.1. 通过 SELECT 子句进行多表查询

语法:
select 字段名
from 表1,表2 …
where 表1.字段 = 表2.字段
and 其它查询条件
例:以学生表 student 和班级表 class 为例
Select student.sid, student.sname, student.classid, class.classid, class.classname
from student,class
where student.classid = class.classid
注意:上面的代码中,以两张表相同的字段信息作为条件,进行两个表联查,但在实际开发中不建议这样使用,最好用主外键约束来实现。

2.3.2. 通过内连接 inner join 进行查询

语法:
select 字段名
from 表1
inner join 表2
on 表1.字段 = 表2.字段
例:以学生表 student 和班级表 class 为例
innerjoin
select student.sid, student.sname, student.classid, class.classid, class.classname
from student
inner join class
on student.classid = class.classid
innerjoinselect
这种场景下得到的是满足判断条件的 studentclass 内部的数据;正因为得到的是内部共有数据,所以连接方式称为内连接。

2.3.3. 通过外连接left join,left outer join,right join,right outer join,union进行查询

2.3.3.1. left join

语法:
select 字段名
from 表1
left join 表2
on 表1.字段 = 表2.字段
例:以学生表 student 和班级表 class 为例
leftjoin
select student.* , class.*
from student
left join class
on student.classid = class.classid
结果如下,class表中不存在的记录填充Null:
leftjoinselect
这种场景下得到的是 student 的所有数据,和满足同一条件的 class 的数据;

2.3.3.2. left outer join

相当于left join + [where 表2.字段 is null]
语法:
select 字段名
from 表1
left join 表2
on 表1.字段 = 表2.字段
where 表2.字段 is null
例:以学生表student和班级表class为例
leftouterjoin
select student.sid,student.sname,class.classid,class.classname
from student
left join class
on student.classid = class.classid
where class.classid is null
leftouterjoinselect
这种场景下得到的是student中的所有数据减去"与 class 满足同一条件 的数据",然后得到的student剩余数据

2.3.3.3. right join

语法:
select 字段名
from 表1
right join 表2
on 表1.字段 = 表2.字段
例:以学生表student和班级表class为例
rightjoin
select student.* , class.*
from student
right join class
on student.classid = class.classid
rightjoinselect
这种场景下得到的是 class 的所有数据,和满足同一条件的 student 的数据;

2.3.3.4. right outer join

相当于right join + [where 表1.字段 is null]
语法:
select 字段名
from 表1
right join 表2
on 表1.字段 = 表2.字段
where 表1.字段 is null
例:以学生表student和班级表class为例
rightouterjoin
select student.sid,student.sname,class.classid,class.classname
from student
right join class
on student.classid = class.classid
where student.classid is null
rightouterjoinselect
这种场景下得到的是 class 中的所有数据减去 "与 student 满足同一条件的数据“,然后得到的 class 剩余数据;

2.3.3.5. left join union right join

语法:
select 字段名
from 表1
left join 表2
on 表1.字段 = 表2.字段
union
select 字段名
from 表1
right join 表2
​​​​​​​on 表1.字段 = 表2.字段
例:以学生表 student 和班级表 class 为例
union
select student.* , class.*
from student
left join class
on student.classid = class.classid
union
select student.* , class.*
from student
right join class
on student.classid = class.classid
unionselect
这种场景下得到的是满足某一条件的公共记录,和独有的记录

3. psycopg2 连接数据库

使用 psycopg2 模块连接到 PostgreSQL 数据库。能够使用以下连接方法执行所有查询。现在我想指定一个与 public 不同的模式来执行我的 SQL 语句。有没有办法在连接方法中指定模式名称?

conn = psycopg2.connect(host="localhost",port="5432",user="postgres",password="password",database="database",)

我尝试直接在方法内部指定架构。 schema=“schema2” 但我收到以下编程错误。
ProgrammingError: invalid dsn: invalid connection option “schema”

4. 数据库连接池

安装:
https://blog.csdn.net/weixin_44041700/article/details/110454901

使用:
https://blog.51cto.com/u_16213421/7115953
https://www.cnblogs.com/xy-ouyang/p/12987676.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/173211.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NPM【问题 01】npm i node-sass@4.14.1报错not found: python2及Cannot download问题处理

node-sass安装问题处理 1.问题2.处理2.1 方案一【我的环境失败】2.2 方案二【成功】2.3 方案三【成功】 1.问题 gyp verb which failed Error: not found: python2 # 1.添加Python27的安装路径到环境变量 gyp verb check python checking for Python executable "python…

Controller接收Postman的raw参数时,属性值全部为空

Controller接收Postman的raw参数时,属性值全部为空 情景再现 在进行业务代码的编写过程中,使用Postman等工具调用Controller接口时,发现属性值全部为空后端代码如下: Requset对象为: public class QuerySkuRequest …

【期中复习】深度学习

文章目录 机器(深度)学习的四大核心要素为什么深度学习,不增加网络宽度黑盒模型的问题计算图线性神经网络梯度下降学习率优化方法softmax函数用于多分类交叉熵线性回归与softmax回归的对比为什么需要非线性激活函数感知机线性回归、softmax回…

Unity的碰撞检测(六)

温馨提示:本文基于前一篇“Unity的碰撞检测(五)”继续探讨两个游戏对象具备刚体的BodyType均为Dynamic,但是Collision Detection属性不同的碰撞检测,阅读本文则默认已阅读前文。 (一)测试说明 在基于两个游戏对象都具…

网络原理之TCP/IP

文章目录 应用层传输层UDP协议TCP协议TCP 的工作机制1. 确认应答2. 超时重传3. 连接管理TCP 的建立连接的过程(三次握手),和断开连接的过程(四次挥手)TCP 断开连接, 四次挥手 3. 滑动窗口5. 流量控制6. 拥塞控制7. 延时应答8. 捎带应答9. 面向字节流10. 异常情况 本章节主要讨论…

帆软report JS实现填报控件只能填写一次

效果 方法: 代码: if(this.getValue()!"")//判断这个控件框是否有值,这里是不为空{this.setEnable(false)}//不为空,则不能再修改else{this.setEnable(true)}//为空,可以编辑

音画欣赏|《诗和远方》

《诗和远方》 8050cm 陈可之2020年绘 面朝大海,春暖花开 [海子] 从明天起,做一个幸福的人 喂马、劈柴,周游世界 从明天起,关心粮食和蔬菜 我有一所房子,面朝大海,春暖花开 从明天起,和每一…

图神经网络论文笔记(一)——北邮:基于学习解纠缠因果子结构的图神经网络去偏

作者 :范少华 研究方向 :图神经网络 论文标题 :基于学习解纠缠因果子结构的图神经网络去偏 论文链接 :https://arxiv.org/pdf/2209.14107.pdf        https://doi.org/10.48550/arXiv.2209.14107 大多数图神经网络(GNNs)通…

通道洗牌的思想神了

大家好啊,我是董董灿。 昨天写了一篇关于分组卷积的文章:分组卷积的思想神了,然后有同学希望多了解下通道洗牌。 我个人感觉,通道洗牌这个算法,或者说这个思想,可以称之为小而精,并且是实际解…

Chatgpt网页版根据关键词自动批量写原创文章软件【可多开自动登录切换gpt账号】

Chatgpt网页版根据关键词自动批量写原创文章软件介绍: 1、需要放入GPT账号和密码放入在账号库.txt里,可以放入多组账号密码,账号切换轮流使用。 2、可以自定义回答指令,也可多个回答指令随机切换。 3、可以给关键词加双标题&…

听GPT 讲Rust源代码--library/std(6)

题图来自 Why you should use Python and Rust together[1] File: rust/library/std/src/sys/unix/thread_parking/netbsd.rs 文件netbsd.rs位于Rust源代码的rust/library/std/src/sys/unix/thread_parking目录下。该文件是Rust标准库中用于Unix操作系统的线程等待和唤醒机制的…

CAN接口的PCB Layout规则要求汇总

随着时代高速发展,控制器局域网(CAN)接口的应用越来越广泛,尤其是在汽车电子、航空航天等领域中发挥着重要作用,为了确保CAN接口的可靠性和稳定性,工程师必须在其PCB Layout方面下功夫,下面来看…

git clone 遇到了 early EOF index-pack failed 问题

问题 由于仓库包含了很多文件,仓库过大,导致clone的时候一直报错: 解决方案 注意:过程中需要耐心等待,如果遇到失败,可以多尝试几遍。 压缩目标仓库文件 compression 是压缩的意思,从 clo…

拉扎维模拟CMOS集成电路设计西交张鸿老师课程P10~13视频学习记录

--------------------------------------------------------------------------------------------------------------------------------- p10 短沟道,除了沟长调,还可能出现速度饱和问题; 但是在拉扎维这本书里面没有考虑这个问题&#…

python安装库

查看安装的库 按下开始r 输入cmd 查看python版本 查看python所有库 安装一个库 在pycharm里面查看库文件 在pycharm里面安装库 在anaconda里面安装库和查看库

SpreadJS 16.2.2 + GcExcel 6.2.3 相结合,还有更强的吗

SpreadJS GcExcel 相结合,还有更强的吗? 内容摘自互联网,,, 设计思路篇 Excel是我们日常办公中最常用的电子表格程序,不仅可满足报表数据的计算需求,还可提供绘图、数据透视分析、BI和Visual…

GPT的广泛应用会对互联网公司造成挑战吗?——探讨GPT在实际使用中的应用和影响

文章目录 前言GPT 技术的背景和发展历程GPT 技术对互联网行业的影响GPT 技术在互联网行业中的应用GPT 技术对于用户隐私和数据安全的威胁GPT 技术对于人类工作岗位的影响加强 AI 伦理和监管加强 AI 安全性和隐私保护推动 AI 创新和发展,避免过度依赖 AIGPT 技术是一…

C++设计模式_15_Proxy 代理模式

Proxy 代理模式也是属于“接口隔离”模式,通过增加一层间接层来解决问题的模式。 文章目录 1. 动机( Motivation)2. 模式定义3. 结构( Structure )4. 代码演示Proxy 代理模式4.1 常规方法4.2 Proxy 代理模式 5. 要点总结6. 其他参考 1. 动机( Motivation) 在面向对…

基于AI与物联网技术的智能视频监控系统架构剖析

智能视频监控系统正逐渐成为我们日常生活和工作中不可或缺的一部分。基于物联网的智能监控系统架构为我们在各个领域提供了更高效、智能化和安全的监控解决方案。本文将以旭帆科技EasyCVR视频监控云平台为例,介绍基于AI、物联网的智能监控系统的架构,并探…

【Linux】:进程程序替换

进程程序替换 一.替换原理二.替换函数三.exec类函数 一.替换原理 用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全…