使用树莓派学习PostgreSQL

2023-05-16

知乎上刷到一个口水仗,大意是mysql和postgresql哪个好。这种问题,正如Java和C#哪个好之类的,我一向都是当八卦浏览的,只看不参与,又不是豆花该吃甜还是该吃咸这种原则问题对吧。

不过还是看到点东西的,把我的好奇心又勾了起来,肝了两个晚上在树莓派上玩了一把。同时给自己定了两个小目标:

1、装上PostgreSQL体验一下;
2、移植一个以前做着玩的以mysql为后台的小软件到PostgreSQL上。

一、树莓派上安装PostgreSQL
为了这次的学习,特地重刷了系统。之前看到某东自营品牌的SSD有活动,就买了一个专供树莓派使用。不得不说树莓派4+SSD移动硬盘做USB BOOT用起来实在是太方便了。这次直接刷了Lite。

在树莓派官方操作系统上安装PostgreSQL(以下简称pgsql)很简单,一条语句搞定:

sudo apt install postgresql

pgsql默认使用端口5432(很好记吧)。保险起见用装完后用 netstat -nutlp | grep 5432 确认本机已在5432端口上监听。

修改 /etc/postgresql/13/main/postgresql.conf:
找到listen_addresses语句,反注释,并修改为:listen_addresses = '0.0.0.0'
当然如果给树莓派设个固定IP,并且改成这个固定IP地址安全性会更高。

修改同级目录下的 pg_hba.conf,追加:
host    all    all    0.0.0.0/0    md5
host    all    all    ::/0    md5

然后重启pgsql服务:

sudo systemctl restart postgresql

二、PostgreSQL初始配置
1、修改默认用户的密码。pgsql初始默认用户名是postgres,默认数据库也叫postgres。

sudo -u postgres psql postgres

以postgres身份执行psql(pgsql的命令行客户端工具),连接到本机的postgres数据库(即psql后的参数)。然后直接修改密码:

\password postgres

按提示输入两次密码,成功后就把默认用户postgres的密码改成你自己的了。

2、添加自己的用户。个人认为在账号管理方面pgsql比mysql繁琐,甚至比mssql都繁。比如我要加个用户(pgsql称之为role)pi,并能操作一个新数据库a:

CREATE USER pi WITH PASSWORD '*****';
CREATE DATABASE A;
GRANT ALL PRIVILEGES ON DATABASE A TO pi;

这就完了么?并没有。进入数据库A后还要继续操作:

\c a;
GRANT ALL PRIVILEGES ON all tables in schema public TO pi;
GRANT USAGE,SELECT ON ALL SEQUENCES in schema public TO pi;

否则后续会遇到一堆权限问题。如果只需要单表授权:GRANT SELECT ON TABLE 某张表 TO pi;。另外,pgsql对自增长类型的字段也需要特意授权。

三、用户表创建(数据库移植)
相对mysql而言,pgsql建表的语句更接近mssql。我在移植过程中发现的几个比较有意思的区别,试举几例:

表创建好以后再建立索引的方式也是pgsql和mssql比较像,都是 create index,而mysql则可以使用alter table ... add index 语法。

表建完后可以在psql环境中使用 \d 表名 命令查看。

四、代码移植
我使用了Npgsql的驱动,总体说来很方便,但还是有点不一样。因为我想移植的软件是以前开发的,基于framework 4.5.1,所以从一开始的思路就是直接找驱动,但未能如愿,看着挺官方的文档给出的下载链接最终跳转到了推荐无线路由器的网页,最后还是下载了完整的数据库的安装包(地址:Download PostgreSQL)、通过仅安装Application Stack Builder组件、再用它来下载需要的驱动解决。默认安装路径:C:\Program Files (x86)\PostgreSQL\Npgsql\bin\net451\,project里引用里面的dll就好。版本倒是正好,也是4.5.1。后续想等空了用.net core 重写试试。

代码方面,using Npgsql;,然后参照SqlClient的那套,只不过把本来Sql开头的那套对象改成NpgsqlConnection、NpgsqlCommand、NpgsqlDataReader等等。

当然具体移植过程中也踩到了坑。第一个不同之处在于连接字符串,server=xxxx要改为 Host=xxxx;第二个要注意的地方是insert into 表名,pgsql这里into不可省略(mssql和mysql都能省);

第三条则有关自增长类型的取值。
我的代码逻辑里有一条是插完表后需要当场取出新得到的ID值。在mysql的版本里用了 LAST_INSERT_ID(),pgsql里则需要改成LASTVAL()。另外注意到了在pgsql里有一种写法,insert into 表名(...) values (...)  returning ID。这里的ID就是该表的自增长类型的字段名。C#代码里可以直接使用cmd.ExecuteScalar().ToString()得到该值。

五、图形化管理界面
当前是 pgAdmin4。可从数据库安装包中选择该组件,也可独立下载安装:Download

参考文献:
C# PostgreSQL - programming PostgreSQL in C#
PostgreSQL function for last inserted ID - Postgresql (w3guides.com)
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用树莓派学习PostgreSQL 的相关文章

随机推荐

  • DNS默认的端口号是: 53

    DNS默认的端口号是 53 DNS 域名系统 主机命名系统 DNS 是 Domain Name System 的缩写 DNS协议运行在UDP协议之上 xff0c 使用端口号53
  • 【pandas】在Pandas中降低dataframe使用的内存

    想要降低dataframe的内存占用主要有两种方法 使用小一点的数值型 datatype把object类型的列转为categorical类型 df span class token operator 61 span pd span clas
  • 第一次ubuntu wsl ssh远程登录各种报错+解决

    首先将ssh默认的22端口改了 xff0c 以防端口被占用冲突 xff0c 这里我改为2222 xff08 感觉这步其实可有可无 xff09 sudo sed span class token operator span i span cl
  • 自适应分级轮询超时机制

    自适应分级轮询超时机制 超时概念实现原理基础 xff1a 目标 xff1a 实现 xff1a 示例 xff1a 超时概念 程序运行中 xff0c 操作后需要等待某个状态 xff0c 正常返回 xff0c 但实际未按预期状态出现 xff0c
  • 惠普hp战66拆机(含主板)

    惠普hp战66拆机 含主板 1 拧螺丝 红色箭头处螺丝不用完全卸下 xff0c 只需拧松到适当 无外旋趋势 xff0c 总共5颗 红色椭圆出螺丝需完全卸下 xff0c 总共两颗 2 撬后盖 从网口处插入撬杆 xff0c 因为就这里缝隙大一些
  • 将两块球形橡皮泥揉在一起,捏成一个正方体。请编程,完成下述功能:从键盘读入2个球形橡皮泥的直径,直径为浮点数;求正方体的边长,并保留两位小数输出;

    化球为正方体 作者 xff1a c 43 43 课程组 单位 xff1a 湖州师范学院 输入格式 第一个球的直径 第二个球的直径 中间用一个空格隔开 输出格式 输出正方体的边长 xff0c 并保留两位小数输出 具体格式见样例 样例 34 g
  • Ubuntu下WIFI不稳定问题

    初步尝试 Ubuntu下无线网络总是不稳定 xff0c 显示WIFI开着 xff0c 密码也正确 xff0c 但是连接时却一直连不上 xff0c 显示一直connecting xff0c 建立WIFI连接时可以看到有如下syslog xff
  • 树莓派:64位 RPI OS(Bullseye) 更换国内源

    树莓派装好后第一件事通常是先apt update和apt upgrade xff0c 默认需要联到树莓派官方的服务器上下载更新 我不知道各位的联网情况如何 xff0c 反正我家里电信网络是龟速 xff0c 慢到忍者神龟都不能忍的那种 xff
  • 树莓派OS:2022-04-04版的Headless设置方法

    Raspberry Pi OS 2022 04 04版增加了一个特性 xff1a 取消了祖传的默认用户 pi 当你刷完镜像首次使用的时候 xff0c 会先跳出来一个界面让你指定用户名和密码 xff0c 无论是桌面版还是Lite版 显然这是一
  • 树莓派:安装WordPress

    之前尝试了在树莓派OS下安装Discuz 成功 xff0c 今天再试下安装WordPress 过程差不多 xff0c 毕竟都是基于LAMP的应用 一 安装操作系统 xff1a 1 刷卡灌系统略 我选择64位的系统 注意自2022 04 04
  • 树莓派:解决4B升级到Bullseye后xrdp不响应的问题

    相较于VNC xff0c 我更喜欢RDP xff0c 因为偷懒更容易 xff0c 在Windows里直接mstsc v IP地址 即可启动远程桌面 所以玩树莓派也一样 xff0c 如果装了桌面版的RPI OS xff0c 那么一定sudo
  • 不忘初心,能偷懒就偷懒:C#操作Word文件

    换了一家公司 xff0c 新单位的信息化建设仍然在路上 OA也正在建设中 xff0c 目前项目发票报销等流程仍然是手工的 xff0c 只能线下填单子 至于是电脑上填好打印出来还是直接空白模板打出来手写倒是不管 xff0c 随意 疫情期间积压
  • Python读写JSON格式数据

    文章目录 JSON格式数据简介使用Python读写JSON格式数据1 读取json文件2 写入json文件 自己编写一个JsonUtils JSON格式数据简介 JSON文件的读写应算成Python基础知识的内容 xff0c 但是由于在编写
  • 银河麒麟初体验

    国产替代及信创看样子是个趋势了 本行业尽管暂未强制 xff0c 但是也被吹风了 xff0c 因此技术储备也要准备起来了 在此大背景及机缘巧合之下 xff0c 接触到了银河麒麟 不吹不黑 xff0c 初体验的感觉就是换壳CentOS 特别申明
  • openEuler@树莓派

    前几天跟华为的销售 售前兄弟探讨国产信创替代 xff0c 话题自然包含了open欧拉操作系统 周末突然又想起这茬儿了 xff0c 就去官网浏览了一下 本想只是随便再进一步了解下 xff0c 没想到居然看到了这个 xff1a 嗯 xff0c
  • 使用树莓派做Apache2 HA实验

    听闻树莓派也已经是个理财产品了 xff0c 默默关闭了某宝网页的我不禁陷入了沉思 xff0c 然后翻出了之前买的一堆3B 话说回来 xff0c 虽然账面上浮盈了 xff0c 但乐不出来 按郭德纲的说法 xff0c 真乐出来这堆树莓派治不好我
  • 真拿树莓派做Linux学习机靠谱不?

    反方辩友 xff1a 不靠谱 xff0c 太贵 干嘛不直接跑个虚拟机 xff1f 我很欣赏一个观点 xff1a 入门的第一奥义是不折腾 就这个方面而言 xff0c 树莓派官方OS确实做的不错 但树莓派的初心毕竟是个学习机 xff0c 跟其他
  • 灌水时间:树莓派4+Lakka做怀旧游戏机

    大力出奇迹 忘了树莓派里还插着TF卡就要想把主板从外壳里取下 xff0c 这把杯具 xff0c TF卡槽都被扯了下来 xff0c 这块理财产品瞬间就失去了投资属性 xff0c 变成了自用的 产品 好在使用价值还在 xff0c USB启动不影
  • 树莓派4:安装 .NET 6 SDK 并测试连接 MSSQL SERVER(无 mono)

    本文基于 2022 09 06 raspios bullseye arm64 首先安装操作系统 xff0c 推荐再 修改国内源 并sudo apt y update amp amp sudo apt y upgrade 如果喜欢在windo
  • 使用树莓派学习PostgreSQL

    知乎上刷到一个口水仗 xff0c 大意是mysql和postgresql哪个好 这种问题 xff0c 正如Java和C 哪个好之类的 xff0c 我一向都是当八卦浏览的 xff0c 只看不参与 xff0c 又不是豆花该吃甜还是该吃咸这种原则