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 directoryIs the server running locally and acceptingconnections 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中有文档说明。在这份文档里,我们将不会明确使用这些特性,但是你自己可以在需要的时候使用它们。 

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

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

相关文章

如何在OpenWRT安装内网穿透工具实现远程访问本地搭建的web网站界面

文章目录 前言1. 检查uhttpd安装2. 部署web站点3. 安装cpolar内网穿透4. 配置远程访问地址5. 配置固定远程地址 前言 uhttpd 是 OpenWrt/LuCI 开发者从零开始编写的 Web 服务器,目的是成为优秀稳定的、适合嵌入式设备的轻量级任务的 HTTP 服务器,并且和…

Mac远程连接Windows 11

1. Windows配置 1.1 打开远程连接权限 打开“控制面板”搜索“远程”,选择“允许远程访问你的计算机”这一项。 1.2 添加远程连接用户 打开“计算机管理”,并在用户下新增“新用户”,share是我自己使用的名字,这个名字不固定随…

FPGA_SD卡读写

一 SD卡 SD卡,安全数字卡,体积小,容量大,存储速度块,支持热插拔。 二 SD卡存储容量 SD卡类型协议规范容量等级SDSCSD1.0上限至2GBSDHCSD2.02GB至32GBSDXCSD3.032GB至2TB 三 SD卡速度等级 标志串列数据写入速度UHS…

Socks5代理IP详解:优势与应用场景

Socks5代理IP作为网络代理技术的前沿选择,其在多方面的优势使其在2024年成为了热门选择。 一、Socks5代理IP的核心特性 1、Socks5代理IP与其他代理类型的比较 HTTP代理设计用于web浏览,仅支持HTTP和HTTPS协议。 Socks4代理支持更多类型的网络协议&…

【Python Scrapy】分布式爬虫利器

在当今信息爆炸的时代,获取大规模数据对于许多应用至关重要。而分布式爬虫作为一种强大的工具,在处理大量数据采集和高效爬取方面展现了卓越的能力。 本文将深入探讨分布式爬虫的实际应用场景,通过代码示例演示其在提升爬取效率、保障系统稳定…

C#知识点-15(匿名函数、使用委托进行窗体传值、反射)

匿名函数 概念:没有名字的函数,一般情况下只调用一次。它的本质就是一个方法,虽然我们没有定义这个方法,但是编译器会把匿名函数编译成一个方法 public delegate void Del1();//无参数无返回值的委托public delegate void Del2(s…

软件测试面试喜欢问的linux文件操作命令总结

1切换目录 我们切换目录的命令是cd 但是在切换的时候,可以用两种形式,一种是绝对目录的形式切换,一种是相对目录的形式切换。 绝对路径:以 / 开头,或者 ~ 开头,分别表示根路径或者root路径。表示从根目录…

解决NPE的三种方式

解决NPE的三种方式 NullPointerException(空指针异常,NPE)是Java编程中常见的错误。解决NPE的方法可以从以下三个方面考虑: 明确处理空引用情况: 在某些情况下,无法避免使用可能为空的引用对象。此时&…

适用于 Linux、Windows 和 macOS 的免费 ONLYOFFICE 桌面应用程序

前言: 最近也是发现了一款特别好用的免费ONLYOFFICE 桌面应用程序忍不住分享给大家,这款编辑器能够打开、阅读和编辑多种文件类型,包括.docx文档、.pptx幻灯片和.xlsx表格等开放XML格式的Office文档。此外,ONLYOFFICE桌面编辑器还…

Linux环境安装Git(详细图文)

说明 此文档Linux环境为:Ubuntu 22.04,本文档介绍两种安装方式,一种是服务器能联网的情况通过yum或apt命令下载,第二种采用源码方式安装。 一、yum/apt方式安装 1.yum方式安装Git 如果你的服务器环境是centos/redhot&#xff…

Java Swing游戏开发学习2

跟随大佬教程继续,图片资源,视频简介有下载链接。 这个文章是看视频教程写的,不算原创。有条件的可以去油管搜索RyiSnow,是一个游戏开发视频制作up主,讲解的非常基础,可以边看边实践,增加对Java…

【EI会议征稿通知】第十届能源材料与环境工程国际学术会议(ICEMEE 2024)

第十届能源材料与环境工程国际学术会议(ICEMEE 2024) 2024 10th International Conference on Energy Materials and Environment Engineering 随着前9年的成功,ICEMEE在2024年迎来了第10届。很荣幸地宣布,第十届能源材料与环境…