使用树莓派学习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 的相关文章

  • Postgres 运行缓慢的删除查询

    我们有一个表 其行数刚刚超过 62k 我们正在对其运行一个非常简单的删除查询 需要 45 分钟才能完成 DELETE FROM myTable WHERE createdtime lt 2017 03 07 05 00 00 000 我们尝
  • 如何以编程方式使用包含多列的 where-in 子句执行 PostgreSQL 查询?

    我的查询是这样的 select from plat customs complex where code t code s in 01013090 10 01029010 90 它在 psql 控制台中运行良好 我的问题是如何在客户端代码中
  • Laravel 5.3 Eloquent 事务和外键限制

    我正在从事一个更大的项目 我们在一个 Postgres 数据库中有多个模式 我们在模式之间创建了外键 这是一个例子 gt 我们有公司模式和用户模式 公司模式有company users表 该表对user users表有外键限制 CREATE
  • 按每月时间为用户标记标签

    数据源 User ID Visit Date 1 2020 01 01 12 29 15 1 2020 01 02 12 30 11 1 2020 04 01 12 31 01 2 2020 05 01 12 31 14 Problem 我
  • 如何从 postgresql 函数或触发器发送一些 http 请求

    我需要通过 http 协议 GET 或 POST 请求 从函数或触发器发送数据 是否可以 您可以尝试用 PL Python 编写触发器并使用 urllib2 进行 POST
  • 对 postgresql 中使用 array_agg 创建的文本聚合进行排序

    我在 postgresql 中有一个表 下表 动物 可以解释我的问题 name tiger cat dog 现在我正在使用以下查询 SELECT array to string array agg name FROM animals 结果是
  • Postgres 平均值计算忽略 null

    这是我的 postgres 表 name revenue John 100 Will 100 Tom 100 Susan 100 Ben 5 rows 在这里 当我计算平均收入时 它返回 100 这显然不是这种情况 而总和 计数 即 400
  • postgresql 中的锁定表

    我有一个名为 games 其中包含一个名为 title 该列是唯一的 数据库中使用PostgreSQL 我有一个用户输入表单 允许他插入新的 game in games 桌子 插入新游戏的功能会检查之前输入的游戏是否存在 game 与相同的
  • 在 docker 中将 pgadmin 连接到 postgres

    我有一个docker compose与服务文件python nginx postgres and pgadmin services postgres image postgres 9 6 env file env volumes postg
  • JPA 和 PostqreSQL:长字符串持久化

    谁能告诉我如何使用 JPA 保存长文本 我使用 PostgreSQL 这是我在类中定义很长字符串的方法 Lob private String body 然而 这会产生一个类型的字段字符变化 255 在数据库中 此外 我尝试使用 Column
  • Postgresql 串行错误自动增量

    我在 postgresql 上遇到问题 我认为 postgresql 中有一个错误 我错误地实现了一些东西 有一个表包括colmn1 primary key colmn2 unique colmn3 插入一行后 如果我尝试使用现有的另一次插
  • PostgreSQL 在递归查询中找到所有可能的组合(排列)

    输入是一个长度为 n 的数组 我需要生成数组元素的所有可能组合 包括输入数组中元素较少的所有组合 IN j A B C OUT k A AB AC ABC ACB B BA BC BAC BCA 随着重复 所以AB BA 我尝试过这样的事情
  • 如何创建不返回任何内容的函数

    我想写一个函数pl pgsql 我在用着Postgres 企业管理器 v3并使用 shell 来创建一个函数 但在 shell 中我必须定义返回类型 如果我不定义返回类型 我将无法创建函数 如何创建一个不返回结果的函数 即创建一个新表的函数
  • 从 Django 调用 Postgres SQL 存储过程

    我正在开发一个带有 Postgresql 数据库的 Django 项目 我编写了一个可以在 Postgres 上完美运行的存储过程 现在我想从 Django 1 5 调用该存储过程 我已经编写了代码 但它提示错误 CREATE FUNCTI
  • Postgres JSON 数据类型 Rails 查询

    我正在使用 Postgres 的 json 数据类型 但想要使用嵌套在 json 中的数据进行查询 排序 我想在 json 数据类型上使用 where 进行订购或查询 例如 我想查询关注者数量 gt 500 的用户 或者我想按关注者或关注数
  • 本地 Postgres 实例和 Azure Cloud Postgres 实例之间的实时同步

    我需要在本地 postgresql 实例与云 postgresql 实例之间设置实时同步过程 请让我知道我可以通过哪些选项来实现它 我是否必须使用任何特定工具或者可以通过复制进行管理 请指教 使用 PgPool http www pgpoo
  • pg_dump 与 pg_dumpall?使用哪一个来进行数据库备份?

    I tried pg dump然后在另一台机器上我尝试导入 sql 并填充数据库 我看到 CREATE TABLE ERROR role prod does not exist CREATE TABLE ERROR role prod do
  • 如何存储没有年份部分的生日?

    类似问题 Postgres 生日选择 https stackoverflow com questions 6913719 postgres birthdays selection 我们正在设计一项新功能 我们将存储人们生日的月份和日期部分
  • 如何加速spark df.write jdbc到postgres数据库?

    我是 Spark 新手 正在尝试使用 df write 加速将数据帧的内容 可以有 200k 到 2M 行 附加到 postgres 数据库 df write format jdbc options url psql url spark d
  • PostgreSQL - 致命:用户“myuser”身份验证失败[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我刚刚在我的 Ubuntu Box 中安装了 PostGreSQL 我想做的第一件事就是创建一个数据库 我读了文档 http www postgres

随机推荐

  • 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 又不是豆花该吃甜还是该吃咸这种原则