如何在 Debian 10 上安装 PostgreSQL

2023-11-08

PostgreSQL,通常简称为 Postgres,是一个开源通用对象关系数据库管理系统。它具有在线备份、时间点恢复、嵌套事务、SQL和JSON查询、多版本并发控制(MVCC)、异步复制等许多强大的功能。

本教程将引导您完成在 Debian 10 上安装 PostgreSQL 数据库服务器的步骤。我们还将探索基本数据库管理的基础知识。

安装 PostgreSQL#

在撰写本文时,默认 Debian 存储库提供的最新 PostgreSQL 版本是 PostgreSQL 版本 11.5。

要在 Debian 服务器上安装 PostgreSQL,请以 root 或用户身份执行以下步骤:须藤权限 :

  1. 首先更新 APT 包索引:

    sudo apt update
  2. 安装 PostgreSQL 服务器和 contrib 软件包,为 PostgreSQL 数据库提供附加功能:

    sudo apt install postgresql postgresql-contrib
  3. 安装完成后,PostgreSQL 服务将启动。要验证安装,请使用psql打印工具服务器版本 :

    sudo -u postgres psql -c "SELECT version();"

    输出应如下所示:

    PostgreSQL 11.5 (Debian 11.5-1+deb10u1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit
psql是一个交互式终端程序,允许您与 PostgreSQL 服务器交互。

PostgreSQL 角色和身份验证方法#

PostgreSQL 使用角色的概念来处理数据库访问权限。根据您设置角色的方式,它可以代表一个数据库用户或一组数据库用户。

PostgreSQL 支持多种认证方式。最常用的方法是:

  • 信任 - 只要符合中定义的条件,角色就可以在没有密码的情况下进行连接pg_hba.conf都满足了。
  • 密码 - 角色可以通过提供密码进行连接。密码可以存储为scram-sha-256 md5 and password(明文)
  • Ident - 仅支持 TCP/IP 连接。它的工作原理是获取客户端的操作系统用户名以及可选的用户名映射。
  • 对等 - 与 Ident 相同,但仅在本地连接上受支持。

PostgreSQL 客户端身份验证在名为的配置文件中定义pg_hba.conf。对于本地连接,PostgreSQL 设置为使用对等身份验证方法。

安装 PostgreSQL 时会自动创建“postgres”用户。该用户是PostgreSQL实例的超级用户,相当于MySQL root用户。

要以“postgres”身份登录 PostgreSQL 服务器,切换到用户postgres 并使用以下命令访问 PostgreSQL 提示符psql公用事业:

sudo su - postgrespsql

从这里,您可以与 PostgreSQL 服务器交互。要退出 PostgreSQL shell,请输入:

\q

您可以使用sudo命令访问 PostgreSQL 提示符而不切换用户:

sudo -u postgres psql

The postgres用户通常仅从本地主机使用。

创建 PostgreSQL 角色和数据库#

The createuser命令允许您从命令行创建新角色。仅具有以下权限的超级用户和角色CREATEROLE特权可以创建新角色。

在以下示例中,我们将创建一个名为的新角色kylo,一个名为kylodb并向该角色授予数据库权限。

  1. 首先,通过发出以下命令创建角色:

    sudo su - postgres -c "createuser kylo"
  2. 接下来,使用以下命令创建数据库createdb命令:

    sudo su - postgres -c "createdb kylodb"
  3. 要向用户授予数据库权限,请连接到 PostgreSQL shell:

    sudo -u postgres psql

    运行以下查询:

    GRANT ALL PRIVILEGES ON DATABASE kylodb TO kylo;

启用对 PostgreSQL 服务器的远程访问#

默认情况下,PostgreSQL 服务器仅侦听本地接口127.0.0.1.

如果要从远程位置连接到 PostgreSQL 服务器,则需要将服务器设置为侦听公共接口并编辑配置以接受远程连接。

打开配置文件postgresql.conf并添加listen_addresses = '*' in the CONNECTIONS AND AUTHENTICATION部分。这指示服务器侦听所有网络接口。

sudo nano /etc/postgresql/11/main/postgresql.conf
/etc/postgresql/11/main/postgresql.conf
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

listen_addresses = '*'     # what IP address(es) to listen on;

保存文件并重新启动 PostgreSQL 服务以使更改生效:

sudo service postgresql restart

使用以下命令验证更改ss公用事业:

ss -nlt | grep 5432
LISTEN   0         128                 0.0.0.0:5432             0.0.0.0:*
LISTEN   0         128                    [::]:5432                [::]:*

输出应显示 PostgreSQL服务器监听在所有接口 (0.0.0.0) 上。

最后一步是通过编辑以下内容将服务器配置为接受远程登录pg_hba.conf file.

以下是一些显示不同用例的示例:

/etc/postgresql/11/main/pg_hba.conf
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# The user jane will be able to access all databases from all locations using an md5 password
host    all             jane            0.0.0.0/0                md5

# The user jane will be able to access only the janedb from all locations using an md5 password
host    janedb          jane            0.0.0.0/0                md5

# The user jane will be able to access all databases from a trusted location (192.168.1.134) without a password
host    all             jane            192.168.1.134            trust

结论#

我们已经向您展示了如何在 Debian 10 上安装和配置 PostgreSQL。有关此主题的更多信息,请参阅PostgreSQL 文档 .

如果您有任何问题或反馈,请随时发表评论。

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

如何在 Debian 10 上安装 PostgreSQL 的相关文章

  • 在 plpgsql 函数中使用 quote_ident()

    我是创建 plpgsql 函数的新手 我需要一些有关在函数内部执行的动态命令上使用 quote ident 甚至 quote literal 的说明 希望有人能给我一个关于它们如何在函数内部工作的具体解释 TIA 这是一个例子 EXECUT
  • 如何在Word 2010中从SQL数据库检索数据?

    我想用 MS SQL 数据库中的数据填充 Word 文档 这可能吗 如果可能的话 如何实现 我过去曾通过多种方式做到这一点 这取决于用户是从 Microsoft Word 外部还是从 Microsoft Word 内部启动操作 From I
  • Android中BaseColumns有什么用

    实现一个类有什么用BaseColumns在安卓中 The BaseColumns http developer android com reference android provider BaseColumns html接口提供了非常常见
  • postgresql 选择不同的最新记录

    我有一个像这样的表 id fkey srno remark date 1 A001 1 2 A001 2 3 A002 1 4 A003 1 5 A002 2 我想要基于 max srno 的不同最新记录 例如 2 A001 2 4 A00
  • 数据加密

    存储大量信用卡信息的数据库是我们刚刚完成的系统中不可避免的一部分 不过 我想要的是卡号的最终安全性 我们可以设置一种加密和解密机制 但我们自己无法解密任何给定的号码 我所追求的是一种即使在数据库级别也能保护这些信息的方法 这样任何人都无法进
  • 如何使用 SQLite R-Trees 将简单空间索引移植到 Postgres?

    我通过遵循 SQLite R Tree 实现了一个基于边界框的简单空间索引模式tutorial https www sqlite org rtree html 这给了我以下架构 CREATE VIRTUAL TABLE events reg
  • 使用 Symfony 3 / Doctrine 进行属性形式的一对多对一

    问题是这样的 我有一个包含 3 个类的模型 person 人员 工作 job 一个人可以有多个工作 任何工作与人的关系都可以有 date start 属性 date end 和 comment 因此 我使用持有这些属性的可连接 person
  • PostgreSQL 窗口函数:row_number() over(按 col2 分区 col 顺序)

    以下结果集源自具有一些连接和联合的 SQL 查询 SQL 查询已经对 Date 和 game 上的行进行了分组 我需要一列来描述按日期列分区的游戏的尝试次数 Username Game ID Date johndoe1 Game 1 100
  • 在 Python 中,如果我有 unix 时间戳,如何将其插入 MySQL 日期时间字段?

    我正在使用 Python MySQLDB 我想将其插入 Mysql 中的 DATETIME 字段 我该如何使用cursor execute 来做到这一点 要将 UNIX 时间戳转换为 Python 日期时间对象 请使用datetime fr
  • 无法将 CLOB 数据存储到 DB2 中的 CLOB 定义的列中

    我猜这是一个重复的问题 但尚未找到合适的解决方案 基本上 我试图通过以下方式将大一点的 XML 即 32000 个字符 插入到 CLOB 列中 DB2程序 插入失败并出现以下错误 看起来 DB2 正在将输入视为 String 而不是 CLO
  • Laravel Eloquent 预加载:加入同一个表两次

    我有一个users表和一个约会桌子 在约会表中 我有两个用户 ID customer id staff id 我想检索所有带有客户姓名和员工姓名的约会 users table id name appointments table id st
  • 我们可以使用sql列出MS Access数据库中的所有表吗?

    我们可以使用 sql 找到 ms access 中的所有表吗 就像我们在 sql server 中所做的那样 select from sys tables 在sqlite中 SELECT FROM sqlite master where t
  • 如何插入UUID的值?

    我在 Play Framework 2 3 支持的 postgresql 9 4 中使用 anorm 2 4 给出一个这样的模型 case class EmailQueue id UUID send from String send to
  • 续集打字稿多对多关系模型数据

    我正在使用sequelize续集打字稿 https github com RobinBuschmann sequelize typescript图书馆 并试图实现以下关系 Team ts Scopes withPlayers include
  • 在PostgreSQL中,如何使用COPY命令插入数据?

    我在使用 PostgreSQL 数据库运行 1 个 NodeJs 项目时遇到问题 尝试使用 pgAdmin 插入数据时出现错误COPY命令 COPY beer name tags alcohol brewery id brewery id
  • 重命名猫鼬中的字段[重复]

    这个问题在这里已经有答案了 我有两个 JSON 对象 每个对象都有一个名字字段 我想将名字重命名为名称 还想使用猫鼬将现有的名字值导入到名称 Schema const mongoose require mongoose const Sche
  • 我应该检查代码中的数据库约束还是应该捕获数据库抛出的异常

    我有一个将数据保存到名为 作业 的表中的应用程序 Jobs 表有一个名为 Name 的列 该列具有 UNIQUE 约束 名称列不是主键 我想知道在尝试保存 更新新条目之前是否应该自己检查重复条目 或者最好等待数据访问层抛出异常 如果这个应用
  • Rails has_many 到 has_many 具有多个模型

    模拟以下情况的最佳方法是什么 Word belongs to wordable polymorphic gt true Phrase has many words as gt workable belongs to story Line h
  • sql直接获取表行数的方法

    stackoverflow 的朋友们大家好 我的例行程序中有一个我认为不必要的步骤 假设您想从图库中获取所有图像 并限制每页一定数量的图像 db PDO object start pagenum x images per page limi
  • Guid.NewGuid().GetHashCode() 用于数据库

    这对于用作数据存储 SQL Server 的 ID 可靠吗 我会使用 guid 但我更喜欢数字值 A guid更有可能代表一个记录uniquely than a numeric value 随着 GUID 确保全球唯一性 GUID 可以跨数

随机推荐

  • 从运行容器到 Docker Hub:分步指南

    Docker 彻底改变了开发人员对软件部署和环境一致性的思考方式 Docker 生态系统中常见的一种情况是 修改正在运行的容器并希望保留这些更改以供将来使用或分发 这可能用于故障排除 测试修改或只是想共享特定的环境设置 实现此目的的最佳方法
  • JavaScript中如何检查字符串是否包含子字符串

    JavaScriptindexOf 方法在字符串中搜索子字符串并返回指定子字符串第一次出现的位置 如果没有找到子字符串 则返回 1 因此 您可以使用 JavaScript IndexOf 方法来检查字符串中是否包含子字符串 在本教程中 我们
  • 10 个快速 Apache 优化技巧

    在当今的数字化世界中 网站性能对于成功至关重要 缓慢的网站不仅会影响用户体验 还会对搜索引擎排名产生潜在影响 并最终影响您的利润 在影响网站性能的众多因素中 网络服务器软件的作用怎么强调都不为过 Apache HTTP Server 是使用
  • “/etc/profile.d/”目录在 Linux 中的作用是什么

    在 Linux 操作系统的广阔前景中 了解各种系统目录的复杂性是有效系统管理的关键 Linux 目录结构包含一组目录 每个目录都有独特的用途 其中包括 etc profile d 目录 该目录在系统配置中起着至关重要的作用 为系统启动期间的
  • 如何在 Fedora 37/36/35 上安装 Gulp.js

    Gulp是一个工具包 可帮助开发人员在开发过程中实现痛苦工作流程的自动化 本教程将帮助您在 Fedora 操作系统上安装 Gulp js 第 1 步 安装 Node js 首先 你需要安装node js在您的系统上 使用以下命令集在 Fed
  • 如何在Linux命令行中检测桌面环境

    有多个选项可用于识别 Linux 桌面上正在运行的桌面环境 这里我们讨论两个常用的选项 首先 执行以下命令检查桌面环境的名称 echo XDG CURRENT DESKTOP 此外 您还可以通过检查当前正在运行的进程来识别桌面 像下面的命令
  • 如何使用 SFTP 安全下载和上传文件

    SFTP SSH 文件传输协议 是在本地和远程服务器之间传输文件的安全协议 到远程系统上运行的所需 SSH 服务器 该协议对本地和远程系统之间的数据传输进行加密 由于SFTP提供安全的数据传输 因此我们推荐使用FTP协议 建议使用 SFTP
  • Bash 函数使用初学者指南!

    Bash 函数是对经常一起使用的一系列命令进行分组的便捷方法 它们允许您重用代码 使您的脚本更有条理且更易于阅读 并且无需一遍又一遍地键入相同的命令 从而节省您的时间 要在 Bash 中创建函数 请使用 function 关键字 后跟函数名
  • 如何在 MySQL 表上创建、列出或删除索引

    索引对于改进数据库表的搜索查询非常有用 例如 您正在具有数百万条记录的数据库表中搜索特定记录 您会发现 在具有索引的表上进行搜索查询所花费的时间非常少 创建索引 这将在 mysql 表上创建索引 这也将允许重复值 CREATE INDEX
  • 在 Bash 中检查变量是否包含数字

    数字是 0 9 数字的组合 Bash 变量以字符串的形式存储所有值 即使存储的值是字符串格式 如果存储的值是有效的数字 我们也可以执行所有算术运算 作为最佳实践 我们应该在执行算术运算之前验证变量的值 数字可以是整数 浮点数或带有 和 符号
  • “按任意键继续...”的 Bash 示例

    在本文中 我们将探讨在 Bash 脚本中检测按键的技术以及如何让脚本在继续之前等待用户输入 当开发在执行特定操作之前需要用户交互或确认的交互式 shell 应用程序时 此技能至关重要 目录 Bash 中按键检测简介 使用 读取 命令 检测特
  • 如何在 Ubuntu 18.04 和 16.04 上安装 AnyDesk

    AnyDesk 是一款与 TeamViewer 类似的出色的远程桌面应用程序 您可以说它是 TeamViewer 的替代品 它是免费提供的 Anydesk 提供比任何其他现有远程桌面应用程序更快的远程连接 就我个人而言 我也很喜欢它并使用它
  • 如何在 Linux 命令行中检查 Python 版本

    Python 是由 Guido van Rossum 创建的一种高级通用编程语言 它于 1991 年首次发布 通常 基于 Linux 的发行版都预装了 Python 版本 本教程将帮助您使用命令行查找 Linux 系统上安装的当前 Pyth
  • 如何在 Linux 上安装 Mencoder 和 MPlayer

    Mencoder是 MPlayer 媒体播放器的配套程序 可用于编码或转换 MPlayer 可以读取的任何音频或视频流 有关在 MPlayer 和 gmplayer 中启用非自由格式的说明 请参阅 RestrictedFormats wik
  • 如何在 PHP 中设置会话超时:新手指南

    作为 Web 开发人员 您可能需要创建具有用户登录 评论部分和其他要求用户保持帐户活跃的功能的网站 因此 实施一种限制用户在您的网站上花费的时间的方法非常重要 这在 PHP 中称为设置会话超时 如果没有此限制 用户可以无限期地在您的网站上保
  • Linux中的Fsck命令(修复文件系统)

    fsck 文件系统检查 是一种命令行实用程序 允许您在一个或多个 Linux 文件系统上执行一致性检查和交互式修复 它使用特定于其检查的文件系统类型的程序 您可以使用fsck命令用于在系统无法启动或无法安装分区的情况下修复损坏的文件系统 在
  • 如何在 Ubuntu 18.04 上安装 OpenCV

    OpenCV 开源计算机视觉库 是一个开源计算机视觉库 具有 C Python 和 Java 的绑定 它的应用非常广泛 包括医学图像分析 拼接街景图像 监控视频 检测和识别人脸 跟踪移动物体 提取 3D 模型等等 OpenCV可以利用多核处
  • 如何在 Ubuntu 20.04 上安装 Steam

    Steam是由 Valve 公司开发的用于购买和玩视频游戏的跨平台娱乐平台 它使您可以访问数千种游戏并结识新朋友 本文介绍如何在 Ubuntu 20 04 上安装 Steam 客户端 先决条件 您需要以以下身份登录具有 sudo 权限的用户
  • 如何创建 MySQL 用户帐户并授予权限

    MySQL 是最流行的开源关系数据库管理系统 MySQL服务器允许我们创建大量的用户帐户并授予适当的权限 以便用户可以访问和管理数据库 本教程介绍如何创建 MySQL 用户帐户并授予权限 在你开始之前 我们假设您的系统上已经安装了 MySQ
  • 如何在 Debian 10 上安装 PostgreSQL

    PostgreSQL 通常简称为 Postgres 是一个开源通用对象关系数据库管理系统 它具有在线备份 时间点恢复 嵌套事务 SQL和JSON查询 多版本并发控制 MVCC 异步复制等许多强大的功能 本教程将引导您完成在 Debian 1