PostgreSQL初学者指南

2020-08-04 00:36:51

默认情况下,安装和创建数据库集群后,PostgreSQL将只在localhost上列出。不允许远程访问。

[postgres@postgres-lab~]$netstat-lptnu|grep post(不是所有进程都可以识别,不会显示非拥有的进程信息,您必须是root用户才能看到所有进程信息。)tcp 0 0 127.0.0.1:5432 0.0.0.0:*LISTEN 1977/邮局局长tcp6 0 0::1:5432:*LISTEN 1977/Postmaster。

[postgres@postgres-lab~]$ps AUX|grep postgres1977 0.0 2.5 286388 14864?SS Jun28 0:02/usr/pgsql-12/bin/postmaster-D/postgresql/datapostgres 1979 0.0 0.2 140768 1360?党卫军6月28日0:00Postgres:伐木机Postgres 19810.0 0.5 286504 3028?党卫军6月28日0:00Postgres:棋子指针Postgres 1982 0.0 0.2 286388 1696年?SS Jun280:03 Postgres:背景作家Postgres 1983 0.0 0.9 286388 5676?SS Jun280:03 Postgres:WalWriter Postgres 19840.0 0.4 286924 2688?SS Jun28 0:02 postgres:自动真空发射器。

[postgres@postgres-lab~]$cd/postgresql/data/[postgres@postgres-lab data]$ls-lah postgresql.conf-rw。1 Postgres Postgres 26K Jun 28 21:44 postgresql.conf。

将postgresql.conf参数LISTEN_ADDRESS更改为您的服务器IP或*以侦听服务器上所有可用的IP:

[postgres@postgres-实验室数据]$vi postgresql.conf##----##连接和身份验证##。---##-连接设置-LISTEN_ADDRESS=';*';##要侦听的IP地址;##以逗号分隔的地址列表;##默认为';localhost';;全部使用';*';

重新启动PostgreSQL以应用更改-您可以使用root os用户服务中的systemctl或Postgres os用户中的pg_ctl-D PGDATA重新启动来执行此操作:

[postgres@postgres-lab~]$netstat-lptnu|grep post(不是所有进程都可以识别,不会显示非拥有的进程信息,您必须是root用户才能看到所有进程信息。)tcp 0 0 0.0.0.0:5432 0.0.0.0:*Listen 30161/邮局局长tcp6 0 0:5432:*Listen 30161/邮局局长

我们可以在其中提供信息,从哪个地址到哪个数据库,哪个用户,通过我们允许的连接方式。另外,我们还必须提供连接类型。

此文件与postgresql.conf位于同一位置(我们可以通过在postgresql.conf中设置pg_hba参数来更改此行为):

[postgres@postgres-lab~]$cd/postgres/data/[postgres@postgres-lab data]$vi pg_hba.conf##type数据库用户地址方法##";local";仅适用于Unix域套接字连接本地所有信任#IPv4本地连接:主机所有127.0.0.1/32信任#IPv6本地连接:主机所有::1/128信任。

对于DATABASE,如果数据库名应该与正在连接的用户名相同,则可以指定数据库名或使用特殊值sameuser。

使用USER,我们可以指定USER或ROLE-角色名称前面应该有+号。

使用Method字段,我们可以设置其中一种身份验证方法-最重要的是:

Trust-允许无密码连接-为来自数据库服务器本身的本地连接设置的moslty。

密码-获取纯密码后允许连接-不要在不受信任的网络中使用-更好-&>不要使用此选项

如果您不想在此创建任何限制,则可以在数据库和用户字段中指定特殊的单词ALL。

可能会出现这样的情况,我们必须使用名为auth-options的附加字段来指定详细信息,例如,用于hostssl连接类型。这个话题将在另一篇文章中讨论。

示例PG_HBA记录-允许所有用户从所有IP地址连接到任何数据库-仅使用密码。

默认URI语法-您可以这样连接:psql postgreSQL://user:passwd@host:5432/dbame或使用更常见的方法:使用参数中提供的连接详细信息从psql连接到远程数据库(对于来自0.0.0.0/0的连接,由于pg_hba.conf中的MD5方法,它将要求输入密码):

我们还可以使用参数-U指定与我们当前使用的操作系统用户名不同的用户名。

此外,所有这些参数都可以从shell变量中获取,这些变量的名称是自描述的-如果我们设置了所有这些变量,我们只需使用简单的psql命令进行连接:

Postgres=##select version();X86_64-PC-linux-gnu上的-PostgreSQL12.3版,编译:GCC(GCC)8.3.1 20191121(红帽8.3.1-5),64位(1行)。

Postgres=##\Conninfo您已作为用户";postgres";连接到主机";10.128.0.2";端口";5432";上的数据库";postgres";。

[postgres@postgres-lab~]$psql-c";SELECT CURRENT_TIME";-f CREATE_USER.sql-c";SELECT CURRENT_TIME";CURRENT_TIME-14:14:26.922453+00(1行)CREATE ROLECREATE ROLECREATE ROLE CURRENT_TIME。

Postgres=##\?常规\版权显示PostgreSQL使用和分发条款\交叉表视图[列]执行查询并在交叉表中显示结果\errVerbose最大限度地显示最新错误消息\g[文件]或;EXECUTE QUERY(并将结果发送到文件或|管道)\gdesc描述查询结果,而不执行\gexec EXECUTE QUERY,然后执行其结果集[前缀]中的每个值执行查询并将结果存储在psql变量\gx[file]中,但强制扩展输出模式\q退出psql\watch[sec]每秒执行查询查询缓冲区\e[file][line]使用外部编辑器编辑查询缓冲区(或文件)\ef[FUNCNAME[line]]使用外部编辑器编辑函数定义\ev[VIEWNAME[line]]使用外部编辑器编辑视图定义\p显示查询缓冲区的内容\r重置(清除)查询缓冲区\s[file]显示历史记录或将其保存到文件\w file将查询缓冲区写入文件。

Postgres-##\h SELECTCommand:SELECTDescription:从表或视图中检索行语法:[WITH[RECURSIVE]WITH_QUERY[,...]]SELECT[ALL|DISTINCT[ON(Expression[,...])]][*|Expression[[as]output_name][,...]][FROM_Item[,...]][WHERE条件][GROUP BY GROUPING_ELEMENT[,...]][HAVING CONDITION[,...]][Window WINDOW_NAME AS(WINDOW_DEFINITION)[,...]][...]。

Postgres-##\h UPDATECommand:UPDATE描述:更新表的行语法:[WITH[RECURSIVE]WITH_QUERY[,...]UPDATE[ONLY]TABLE_NAME[*][[AS]别名]SET{COLUMN_NAME={表达式|DEFAULT}|(COLUMN_NAME[,...])=[ROW]({EXPRESS|DEFAULT}[,...])|(COLUMN_NAME[,...])=(子选)}[,...]。。

Postgres-##\h ALTER SYSTEM命令:ALTER SYSTEMD描述:更改服务器配置参数语法:ALTER SYSTEM SET CONFIGURATION_PARAMETER{TO|=}{VALUE|';VALUE';|DEFAULT}ALTER SYSTEM RESET CONFIGURATION_PARAMETER ALTER SYSTEM RESET ALLURL:https://www.postgresql.org/docs/12/sql-altersystem.html。

使用.pgpass文件保存密码,便于与PostgreSQL数据库服务器连接。默认情况下,客户端在您的主目录中查找.pgpass。此文件在Linux上应该具有0600权限。

我们可以通过设置shell变量PGPASSFILE来更改.pgpass的位置。示例.pgpass可能如下所示-当然,我们可以为不同的连接在其中添加多行:

下面的.pgpass为用户postgres设置密码postgres12345,以便用户postgres在连接到端口5432上的主机postgres-lab时连接到数据库postgres。保存.pgpass后,我们无需提供密码即可连接到数据库:

服务文件允许我们保存连接描述并按简单名称调用它们。服务文件可以打开:

PostgreSQL客户端始终首先查找覆盖系统一级的上级服务文件。服务文件中的示例记录如下所示:

保存服务文件后,我们可以这样连接psql(密码将来自.pgpass):

设置之后,记得重新加载PostgreSQL服务器。默认情况下,日志文件位于$PGDATA/log目录中-在我们的示例配置中,该目录将为:

[postgres@postgres-lab~]$ls-lah/postgresql/data/log/tal24Kdrwx。2 Postgres Postgres 162 7月3日00:00.drwx。20Postgres Postgres 4.0K 7月3日00:00.-RW。1 Postgres Postgres 153 Jul 3 10:07 postgresql-Fri.log-rw。1 Postgres Postgres 0 6月29 00:00 postgreSQL-Mon.log-rw。1 Postgres Postgres 186 Jun 28 21:46 postgreSQL-Sun.log-rw。1 Postgres Postgres 4.7K 7月2日17:00 PostgreSQL-Thu.log-rw。1 Postgres Postgres 72 Jun 30 19:46 postgresql-Tue.log-rw。1 Postgres Postgres 0 7月1日00:00 PostgreSQL-Wed.log