PostgreSQL教程(二):pg安装、架构基础、创建并访问数据库

安装

自然,在你能开始使用PostgreSQL之前, 你必须安装它。PostgreSQL很有可能已经安装到你的节点上了, 因为它可能包含在你的操作系统的发布里, 或者是系统管理员已经安装了它。如果是这样的话, 那么你应该从操作系统的文档或者你的系统管理员那里获取有关如何访问PostgreSQL的信息。

如果你不清楚PostgreSQL是否已经安装, 或者不知道你能否用它(已经安装的)做自己的实验,那么你就可以自己安装。 这么做并不难,并且是一次很好的练习。PostgreSQL可以由任何非特权用户安装, 并不需要超级用户 (root)的权限。

如果你准备自己安装PostgreSQL, 那么请参考第 16 章以获取安装的有关信息, 安装之后再回到这个指导手册来。一定要记住要尽可能遵循有关设置合适的环境变量章节里的信息。

如果你的站点管理员没有按照缺省的方式设置各项相关参数, 那你还有点额外的活儿要干。比如,如果数据库服务器机器是一个远程的机器, 那你就需要把PGHOST环境变量设置为数据库服务器的名字。环境变量PGPORT也可能需要设置。总而言之就是: 如果当你试着启动一个应用而该应用报告说不能与数据库建立联接时, 你应该马上与你的数据库管理员联系,如果你就是管理员, 那么你就要参考文档以确保你的环境变量得到正确的设置。 如果你不理解随后的几段,那么先阅读下一节。

架构基础

在我们继续之前,你应该先了解PostgreSQL的系统架构。对PostgreSQL的部件之间如何相互作用的理解将使本节更容易理解。

在数据库术语里,PostgreSQL使用一种客户端/服务器的模型。一次PostgreSQL会话由下列相关的进程(程序)组成:

  • 一个服务器进程,它管理数据库文件、接收来自客户端应用与数据库的连接并且代表客户端在数据库上执行操作。该数据库服务器程序叫做 postgres
  • 那些需要执行数据库操作的用户的客户端(前端)应用。客户端应用可能本身就是多种多样的:可以是一个面向文本的工具,也可以是一个图形界面的应用,或者是一个通过访问数据库来显示网页的网页服务器,或者是一个特制的数据库管理工具。一些客户端应用是和PostgreSQL发布一起提供的,但绝大部分是用户开发的。

和典型的客户端/服务器应用(C/S应用)一样,这些客户端和服务器可以在不同的主机上。这时它们通过TCP/IP网络连接通讯。你应该记住的是,在客户机上可以访问的文件未必能够在数据库服务器机器上访问(或者只能用不同的文件名进行访问)。

PostgreSQL服务器可以处理来自客户端的多个并发请求。因此,它为每个连接启动(“forks”)一个新的进程。从这个时候开始,客户端和新服务器进程就不再经过最初的postgres进程的干涉进行通讯。因此,主服务器进程总是在运行并等待着客户端连接,而客户端和相关联的服务器进程则是起起停停(当然,这些对于用户是透明的。我们介绍这些主要是为了内容的完整性)。

创建一个数据库

看看你能否访问数据库服务器的第一个例子就是尝试创建一个数据库。一台运行着的PostgreSQL服务器可以管理许多数据库。通常我们会为每个项目和每个用户单独使用一个数据库。

你的站点管理员可能已经为你创建了可以使用的数据库。如果这样你就可以省略这一步,并且跳到下一节。

要创建一个新的数据库,在我们这个例子里叫mydb,你可以使用下面的命令:

createdb mydb;

说明:createdb 是一个操作系统命令行可执行文件,可以在不连接数据库的情况下测试pgsql

执行完命令如果不产生任何影响说明该步骤成功,你可以跳过本节的剩余部分。

如果你是第一次使用pg,很有可能在执行完上述命令后出现下面的错误:

0️⃣ :createdb: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL:  role "xxxx" does not exist 

说明你目前登录的用户在pgsql中没有被找到,你可以联系管理员创建相对应的用户后再尝试测试,或者如果你是管理员可以切换到“postgres”用户,以postgres用户进行测试

首先切换用户

su - postgres

然后再尝试创建

createdb mydb

如果你看到类似下面这样的信息:

①:createdb: command not found

那么就是PostgreSQL没有安装好。或者根本没有安装,或者是你的shell搜索路径没有设置正确。尝试用绝对路径调用该命令试试:

 /usr/local/pgsql/bin/createdb mydb;

注意:在你的站点上这个路径可能不一样。和你的站点管理员联系或者看看安装指导获取正确的位置。

另外一种响应可能是这样:

②:createdb: could not connect to database postgres: could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

这意味着服务器没有启动,或者没有按照createdb预期的启动。同样,你也要查看安装指导或者咨询站点管理员。

另外一个响应可能是这样:

③:createdb: could not connect to database postgres: FATAL: role "joe" does not exist

在这里提到了你自己的登录名。如果管理员没有为你创建PostgreSQL用户账号,就会发生这些现象。(PostgreSQL用户账号和操作系统用户账号是不同的。)如果你是管理员,参阅第 21 章获取创建用户帐号的帮助。 你需要变成安装PostgreSQL的操作系统用户的身份(通常是postgres)才能创建第一个用户账号。也有可能是赋予你的PostgreSQL用户名和你的操作系统用户名不同:这种情况下,你需要使用-U选项或者使用PGUSER环境变量指定你的PostgreSQL用户名。

如果你有你的数据库用户账号,但是没有创建数据库所需要的权限,那么你会看到下面的信息:

createdb: database creation failed: ERROR:  permission denied to create database

 并非所有用户都被许可创建新数据库。 如果PostgreSQL拒绝为你创建数据库, 那么你需要让站点管理员赋予你创建数据库的权限。出现这种情况时请咨询你的站点管理员。 如果你自己安装了PostgreSQL, 那么你应该以你启动数据库服务器的用户身份登陆然后参考手册完成权限的赋予工作。

你还可以用其它名字创建数据库。PostgreSQL允许你在一个站点上创建任意数量的数据库。 数据库名必须是以字母开头并且小于 63 个字符长。 一个方便的做法是创建和你当前用户名同名的数据库。 许多工具假设该数据库名为缺省数据库名,所以这样可以节省你的敲键。 要创建这样的数据库,只需要键入:

$ createdb

如果你再也不想使用你的数据库了,那么你可以删除它。 比如,如果你是数据库mydb的所有人(创建人), 那么你就可以用下面的命令删除它:

$ dropdb mydb 

(对于这条命令而言,数据库名不是缺省的用户名,因此你就必须声明它) 。这个动作将在物理上把所有与该数据库相关的文件都删除并且不可取消, 因此做这中操作之前一定要考虑清楚。 

更多关于createdbdropdb的信息可以分别在createdb和dropdb中找到。


为什么这么做的解释:PostgreSQL用户名是和操作系统用户账号分开的。 如果你连接到一个数据库时,你可以选择以何种PostgreSQL用户名进行联接; 如果你不选择,那么缺省就是你的当前操作系统账号。 如果这样,那么总有一个与操作系统用户同名的PostgreSQL用户账号用于启动服务器, 并且通常这个用户都有创建数据库的权限。如果你不想以该用户身份登陆, 那么你也可以在任何地方声明一个-U选项以选择一个用于连接的PostgreSQL用户名。


访问数据库

一旦你创建了数据库,你就可以通过以下方式访问它:

  • 运行PostgreSQL的交互式终端程序,它被称为psql, 它允许你交互地输入、编辑和执行SQL命令。

  • 使用一种已有的图形化前端工具,比如pgAdmin或者带ODBC或JDBC支持的办公套件来创建和管理数据库。这种方法在这份教程中没有介绍。

  • 使用多种绑定发行的语言中的一种写一个自定义的应用。这些可能性在第 IV 部分中将有更深入的讨论。

你可能需要启动psql来试验本教程中的例子。 你可以用下面的命令为mydb数据库激活它:

$ psql mydb

如果你不提供数据库名字,那么它的缺省值就是你的用户账号名字。在前面使用createdb的小节里你应该已经了解了这种方式。

在psql中,你将看到下面的欢迎信息:

psql (14.1 (Debian 14.1-1.pgdg110+1))
Type "help" for help.

mydb=# 

最后一行也可能是:

mydb=> 

mydb=# 这个提示符意味着你是数据库超级用户,最可能出现在你自己安装了 PostgreSQL实例的情况下。 作为超级用户意味着你不受访问控制的限制。 对于本教程的目的而言, 是否超级用户并不重要。 

如果你启动psql时碰到了问题,那么请回到前面的小节。诊断createdb的方法和诊断 psql的方法很类似, 如果前者能运行那么后者也应该能运行。

psql打印出的最后一行是提示符,它表示psql正听着你说话,这个时候你就可以敲入 SQL查询到一个psql维护的工作区中。试验一下下面的命令:

mydb=# select version();
                                                           version                                                           
-------------------------------------------------------------------------------------------------------------------------
 PostgreSQL 14.1 (Debian 14.1-1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit
(1 row)

mydb=# SELECT current_date;
 current_date 
--------------
 2024-02-19
(1 row)

mydb=# SELECT 2 + 3;
 ?column? 
----------
        5
(1 row)

psql程序有一些不属于SQL命令的内部命令。它们以反斜线开头,“\”。 欢迎信息中列出了一些这种命令。比如,你可以用下面的命令获取各种PostgreSQL的SQL命令的帮助语法:

要退出psql,输入:

mydb=# \q

psql将会退出并且让你返回到命令行shell。 (要获取更多有关内部命令的信息,你可以在psql提示符上键入?。) psql的完整功能在psql中有文档说明。在这份文档里,我们将不会明确使用这些特性,但是你自己可以在需要的时候使用它们。 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

BabylonJS 6.0文档 Deep Dive 动画(一):动画介绍

1. 动画介绍 无论动画如何实现,它都必须考虑所需的动作、时间、产生所需流动性所需的帧数以及序列中的关键点。这个介绍应该有助于理解Babylon.js是如何进行动画的,以及它们是如何实现的。 动画由一系列图像、帧生成,这些图像、帧一个接一个地…

Google插件Sider: ChatGPT Sidebar + GPTs GPT-4 Turbo Sider

Sider: ChatGPT Sidebar 可以使得满屏都是机器人,左侧栏可以打开访问GPT-4. 配置跳板机地址 google 搜索的右侧也有打开

MATLAB环境下基于短时傅里叶变换和Rényi熵的脑电信号和语音信号分析

傅里叶变换是不能很好的反映信号在时域的某一个局部范围的频谱特点的,这一点很可惜。因为在许多实际工程中,人们对信号在局部区域的特征是比较关心的,这些特征包含着十分有用的信息。这类信号因为在时域(或者是空间域)上具有突变的非稳定性和…

C语言自定义类型:结构体的使用及其内存对齐【超详细建议点赞收藏】

目录 1. 结构体类型的声明1.1 结构的声明1.2 结构体变量的创建和初始化1.3 结构的特殊声明---匿名结构体1.4 结构的自引用 2.结构体内存对齐(重点!!)2.1 对齐规则2.2 例题讲解2.3 为什么存在内存对齐?2.4 修改默认对齐…

华为全新研发中心即将启用,投资超百亿 | 百能云芯

2月19日 ,上海市发改委网站发布了《2024年上海市重大工程清单》,内容涉及科技产业、社会民生、生态文明建设、城市基础设施、城乡融合与乡村振兴等五大类,共191项重大工程。 191项重大工程中,科技产业类占比最多(76项&…

Spring Boot打war包部署到Tomcat,访问页面404 !!!

水善利万物而不争,处众人之所恶,故几于道💦 文章目录 Spring Boot打war包部署到Tomcat,访问页面404 !!!解决办法:检查Tomcat版本和Jdk的对应关系,我的Tomcat是6.x&#x…

RK3568平台开发系列讲解(Linux系统篇)通过I2C总线访问客户端方法

🚀返回专栏总目录 文章目录 一、普通I2C通信二、系统管理总线(SMBus)兼容函数三、在开发板配置文件中实例化I2C设备(弃用的旧方式)沉淀、分享、成长,让自己和他人都能有所收获!😄 串行总线事务只是访问寄存器来设置/获取其内容。I2C遵循该规则。I2C内核提供两种API,…

(十二)【Jmeter】线程(Threads(Users))之setUp 线程组

简述 操作路径如下: 作用:在正式测试开始前执行预加载或预热操作,为测试做准备。配置:设置预加载或预热操作的采样器、循环次数等参数。使用场景:确保在正式测试开始前应用程序已经达到稳定状态,减少测试结果的偏差。优点:提供预加载或预热操作,确保测试的准确性。缺…

Code Control Process

代码提交流程(Code Control Process) VSS,早前定义的版本控制,没有谁对不对,但是要根本解决冲突,特别人多的时候,50个人的时候,处理冲突时非常的麻烦的,改半天还改错了&…

C++模板从入门到入土

1. 泛型编程 如果我们需要实现一个不同类型的交换函数,如果是学的C语言,你要交换哪些类型,不同的类型就需要重新写一个来实现,所以这是很麻烦的,虽然可以cv一下,有了模板就可以减轻负担。 下面写一个适…

重新安装VSCode后,按住Ctrl(or Command) 点击鼠标左键不跳转问题

重新安装VSCode后,按住Ctrl(or Command) 点击鼠标左键不跳转问题 原因:重新安装一般是因为相应编程语言的插件被删除了或还没有下载。 本次是由于Python相关的插件被删除了,因此导致Python无法跳转。 解决办法 在vs…

人工智能会是第四次工业革命吗?引领第四次工业革命的核心力量

许多专家和学者确实认为人工智能(AI)将是第四次工业革命的核心。第四次工业革命,也被称为"工业4.0",是指正在发生的一场以高度数字化和互联网为基础的技术革新。 自18世纪的蒸汽机,到20世纪的电力和信息技术…

YOLO-World初体验:Ultralytics版本,可直接上手,离线运行

YOLOv8官方新增了对YOLO-World的支持,本文利用其提供的模型及接口进行了体验。 关于YOLO-World的详细介绍,见:YOLO-World:实时开放词汇目标检测-CSDN博客 目录 1. 前言 2. 安装(更新) Ultralytics安装&am…

低代码开发:拖拉拽自定义表单的创新之道

一、前言 在软工圣经《人月神话》一书中,作者Brooks指出了软件发展的一个僵局:在落后的项目中增加人手,只会使进度更加落后。 为了更快完成项目,开发团队会发展的极其庞大,以致于所有的时间都花费在沟通和变更决策上&a…

Apache服务

目录 引言 一、常见的http服务程序 (一)lls (二)nginx (三)Apache (四)Tomcat 二、Apache特点 三、Apache服务的安装 (一)yum安装及配置文件 1.配置…

Mybatis速成(二)

文章目录 1. Mybatis基础操作1.1 需求1.2 准备1.3 删除1.3.1 功能实现1.3.2 日志输入1.3.3 预编译SQL1.3.3.1 介绍1.3.3.2 SQL注入1.3.3.3 参数占位符 1.4 新增1.4.1 基本新增1.4.2 主键返回 1.5 更新1.6 查询1.6.1 根据ID查询1.6.2 数据封装1.6.3 条件查询1.6.4 参数名说明 2.…

redis实现消息队列redis发布订阅redis监听key

文章目录 Redis消息队列实现异步秒杀1. jvm阻塞队列问题2. 什么是消息队列3. Redis实现消息队列1. 基于List结构模拟消息队列操作优缺点 2. 基于PubSub发布订阅的消息队列操作优缺点spring 结合redis的pubsub使用示例1. 引入依赖2. 配置文件3. RedisConfig4. CustomizeMessageL…

运维SRE-16 自动化批量管理-ansible2

7.6ansible-软件包管理模块 yum_repository(管理yum源) yum(yum命令) get_url(wget命令)1)yum源配置管理模块 yum源模块 yum_repositoryyum源配置文件内容name[epel]yum源中的名字(中括号里面的名字即可)descriptionnamexxxxxxyum源的注释说明baseurlbaseurlyum源…

一位面试了20+家公司的测试工程师,发现了面试“绝杀四重技”!

年少不懂面试经,读懂已是测试人。 大家好,我是一名历经沧桑,看透互联网行业百态的测试从业者,经过数年的勤学苦练,精钻深研究,终于从初出茅庐的职场新手成长为现在的测试老鸟,早已看透了面试官…

尝试一下最新的联合办公利器ONLYOffice

下载下来一起试试吧 桌面安装版下载地址:https://www.onlyoffice.com/zh/download-desktop.aspx) 官网地址:https://www.onlyoffice.com 普通Office对联合办公的局限性 普通Office软件(如Microsoft Office、Google Docs等)在面对…