我想在DBeaver中远程连接WSL2(Ubuntu),但连接设置无法成功。→问题已解决!

环境

バージョンHost OSWindows 10 Home21H1(OSビルド:19043.1165)Virtual Machine(仮想環境技術)WSL2-Remote OS(仮想環境OS)Ubuntu20.04.2 LTS (GNU/Linux 5.4.72-microsoft-standard-WSL2 x86_64)DatabasePostgreSQL12.7 (Ubuntu 12.7-0ubuntu0.20.04.1)Database GUIDBeaver21.1.3.202107181810Docker無し-エディタVisual Studio Code1.60.0

1. 问 题・结 论

【问题】
我想从DBeaver连接到Ubuntu进行远程连接。如何配置DBeaver的连接信息才能实现?

【結論】
连接信息如下。
但在配置连接信息之前,必须进行”PostgreSQL访问设置的更改”。

<更改PostgreSQL访问设置>
↓需要更改的文件和更改内容↓
① /etc/postgresql/12/main/postgresql.conf
更改前:#listen_addresses = ‘localhost’
更改后:listen_addresses = ‘0.0.0.0’

②/etc/postgresql/12/main/pg_hba.conf:
更改前:host all all 127.0.0.1/32 md5
更改后:host all all all      md5

<连接信息>
服务器>主机=(Ubuntu的IPv4地址)
服务器>端口=5432
服务器>数据库=postgres
认证>用户名=postgres
认证>密码=(设定的密码)

【手間取ったところ】
在设置DBeaver的连接信息之前,我没有意识到需要更改PostgreSQL的访问设置。指南中的”更改访问设置”一词被我误解为将DBeaver的连接信息从未输入状态更改为已输入状态。然而,在输入连接信息后,出现了”连接被拒绝,请确保主机名和端口号正确,并确认postmaster正在接受TCP/IP连接”的错误。因此,我产生了疑问:”是不是因为postmaster没有接受TCP/IP连接才导致了错误?”以及”什么是postmaster?”在研读了相关文档和查看了连接DBeaver和主机PC的文章中的连接信息(其中大多数文章中”服务器>主机”为”localhost”),我才意识到我对”更改访问设置”的意思误解了。

在意识到需要更改PostgreSQL访问设置后,我立即无法找到需要更改设置所需的目录。通过搜索”PostgreSQL访问设置”等关键词,发现有大量提及”配置文件存在于data目录”的信息,因此我尝试寻找data目录,但在我要使用的环境中,无法找到它。最终,我发现配置文件实际上以”/etc/postgresql/12/main/postgresql.conf”和”/etc/postgresql/12/main/pg_hba.conf”的形式存在。

– 這個可能是其中一個原因,我並沒有完全核實它是否是原因,但為了保險起見,我記錄下來。關於設定檔「pg_hba.conf」,在將「127.0.0.1/32」變更為「all」時,發現「all」這個選項位置與「peer/md5」有些偏移,所以調整它們的排列順序使其成為一直線。

从DBeaver连接到WSL2(Ubuntu)上的数据库(postgres)。

因为密码认证错误(FATAL: password authentication failed for user “postgres”),遇到了一些困难。
经过使用SQL命令「ALTER ROLE postgres with PASSWORD ‘任意的密码’;」重新设置了postgres的密码后,问题得到了解决!

首先

我正在使用『开源数据库标准教科书 -PostgreSQL-(Ver.2.0.0)Kindle版』学习PostgreSQL的操作。

我正在进行这本教科书的第4章练习,第4.2节练习2:邮政编码数据库。

在这个环境中进行了以下工作:
【最初的环境】
主机PC:Windows10
图形用户界面DB工具:DBeaver
虚拟化软件:VirtualBox
客户PC:Vagrant(即CentOS7虚拟机)
容器化虚拟环境:Docker
命令行界面DB客户端:PostgreSQL

我在这个问题上遇到了困难。
【困难的事情】
我想导入一个CSV文件(包含邮政编码数据)到数据库(DBeaver/PostgreSQL),将其作为数据库表”zip”的记录数据。但是,出现了错误,无法导入。

在这个过程中,我们进行了试错测试。
【之前的经历】
– 将CSV文件导入数据库的方法_尝试1(未解决)『OSS-DB标准教科书』3
– 将CSV文件导入数据库的方法_尝试2(未解决)『OSS-DB标准教科书』4
– 将CSV文件导入数据库的方法_尝试3(未解决)_使用WinSCP将CSV文件上传到Vagrant『OSS-DB标准教科书』5

我从黑泽先生(@kurosawa_kuro)那里得到了以下建议:“在WSL2上处理外部文件比较轻松”

我根据使用WSL2进行环境搭建的指南,并创建了以下环境。

【创建的环境】=☆
主机电脑:Windows10
虚拟环境技术:WSL2
虚拟环境操作系统:Ubuntu
编辑器:VSC
数据库图形用户界面:DBeaver

【为了创造上述环境(☆)所做的事情】
(参考了黑泽先生(@kurosawa_kuro)的指引)
(个人备忘录:A~C的工作细节和D的试错引入部分已集结在非公开文章《使用WSL2处理PostgreSQL》中)

◆安装编辑器◆
・安装VSC

在Win10上安装虚拟环境技术:
– 安装WSL2
– 安装Ubuntu

◆C. 从编辑器进行连接◆
– 从VSC远程连接到Ubuntu(VSC与WSL2协作)
– 通过VSC上传文件(使用VSC将邮政编码CSV文件上传到Ubuntu)

・在WSL2上安装PostgreSQL
・创建Linux(Ubuntu)上的PostgreSQL用户“postgres”
・为在psql shell中运行PostgreSQL做准备(命令行变为“postgres=#”)。成功进入psql shell!
・创建数据库(PostgreSQL)用户“postgres”

【为了创建上述环境(☆)而正在进行的工作】
◆D. 通过DB图形用户界面进行连接◆
· 更改访问设置。从DBeaver远程连接到Ubuntu。
· 重新启动postgres。

【现状】
我已经完成了C,但是在D的“从DBeaver远程连接至Ubuntu”方面遇到了麻烦。
我希望在整理这篇文章的同时能够解决这个问题。

【备忘录:启动PostgreSQL的方法】

1. 在主机上点击Ubuntu的图标来启动Ubuntu。
2. 输入「code .」加Enter来启动Ubuntu上的VSC。
3. (以下为加粗字体=VSC Ubuntu终端中输入的命令)
umesan@MyComputer:/mnt/c/WINDOWS/system32$ sudo service postgresql start
[sudo] 输入umesan的密码(密码)
正在启动 PostgreSQL 12 数据库服务器
(↑确认PostgreSQL 12已启动!)

umesan@MyComputer:/mnt/c/WINDOWS/system32$ sudo -u postgres psql
psql(12.7(Ubuntu 12.7-0ubuntu0.20.04.1))
键入“help”获取帮助。

将以下语句进行汉语的同义转述,只需要一种选择:
postgres=#
(已进入psql)
(要退出postgres=# → 输入“\q”或者“Ctrl+D”)

3. 我之前尝试过的事情

尝试创建一个数据库并尝试将其输入到DBeaver的连接信息的数据库栏中,但失败了。

2.png

eth0想要获取的WSL2的IP地址。 上面的例子是“172.29.81.79”。
注意:获取的IP地址在这里不是固定的,所以每次启动Ubuntu都有可能会改变!

• 端口:默认为「5432」

・数据库:这里停留了一会儿。已经创建了PostgreSQL用户,但还没有创建任何数据库。好像需要先在PostgreSQL中创建数据库!?
→ 前往WSL(Ubuntu)并创建postgresql。

umesan@MyComputer:/mnt/c/WINDOWS/system32$ sudo service postgresql start                                         (postgres サービスを開始)
umesan@MyComputer:/mnt/c/WINDOWS/system32$ sudo -u postgres psql
(postgres サービスに接続し、psql シェルを開く)
(psql (12.7 (Ubuntu 12.7-0ubuntu0.20.04.1))
Type "help" for help.
postgres=#
と表示された。正常に psql シェルに入れた!)

创建数据库

postgres=# createdb 2nd_tutorial_WSL
(2nd_tutorial_WSLという名前のデータベースを作って!)
postgres-# \l
(データベースの一覧を表示して!)
                              List of databases
   Name    |  Owner   | Encoding | Collate |  Ctype  |   Access privileges
-----------+----------+----------+---------+---------+-----------------------
 postgres  | postgres | UTF8     | C.UTF-8 | C.UTF-8 |
 template0 | postgres | UTF8     | C.UTF-8 | C.UTF-8 | =c/postgres          +
           |          |          |         |         | postgres=CTc/postgres
 template1 | postgres | UTF8     | C.UTF-8 | C.UTF-8 | =c/postgres          +
           |          |          |         |         | postgres=CTc/postgres
(3 rows)

也许是用户权限不包括“创建数据库”的状态吗?
尝试授予权限。

ALTER ROLE postgres CREATEDB;
(データベース作成権限の付与)
(ALTER ROLE
postgres=#
と表示される)
postgres=# createdb 2nd_tutorial_WSL
(2nd_tutorial_WSLという名前のデータベースを作って!)
postgres-# \l
(データベースの一覧を表示して!)
(                              List of databases
   Name    |  Owner   | Encoding | Collate |  Ctype  |   Access privileges
-----------+----------+----------+---------+---------+-----------------------
 postgres  | postgres | UTF8     | C.UTF-8 | C.UTF-8 |
 template0 | postgres | UTF8     | C.UTF-8 | C.UTF-8 | =c/postgres          +
           |          |          |         |         | postgres=CTc/postgres
 template1 | postgres | UTF8     | C.UTF-8 | C.UTF-8 | =c/postgres          +
           |          |          |         |         | postgres=CTc/postgres
(3 rows)
と表示された。前回同様データベースは作成されていない…。なぜ???)
(エラー文は表示されていない。原因の調べようが無くて困る。)

postgres=# select rolname, rolcreatedb from pg_roles;
(権限を調べる)
3.png

尝试了以下命令并未成功:「postgres-#sudo su postgres、postgres-# psql -c “create database 2nd_tutorial owner postgres”」「create database “2nd_tutorial_wsl”」「CREATE DATABASE 2nd_tutorial」。在这里,放弃创建数据库的想法,决定使用现有的数据库“postgres”。继续下一步。

2. 尝试使用DB「postgres」进行连接→连接失败

6.png

嗯——??又在网络连接上遇到了问题……。
参考:在Windows Subsystem for Linux 2中改善网络连接。

3. 确认当前位置关系。

IMG_9008.JPG

问题:端口号随便吗?

↑端口号在以前使用vagrant时创建的数据库”first_turorial”中也使用了5432,并且这次也使用了默认的5432。但是,端口号可以任意选择吗?除了默认端口号外,是否有其他使用5432的理由?对于端口的机制我还不太理解。

在互联网服务器的端口号具有重要意义。
个人电脑的端口号每次都在变化,没有太多意义。

如果有可用的端口号,是否可以随便使用呢?我想知道WSL2的端口号,如果和主机PC的端口号都可用,可以任意选择哪一个呢?

如果没问题的话,这次应该也没有5432的问题。
因为在WSL终端上连接到psql并显示为“postgres#”,所以PostgreSQL已经启动。
在命令“\l”中确认到“数据库列表”中存在名为“postgres”的数据库。

为什么无法连接那个地方呢?

重新启动WSL2和 DBeaver,并重新输入连接信息 → 连接失败

可以尝试重新启动WSL2和DBeaver,然后再次输入相同的连接信息。

umesan@MyComputer:/mnt/c/WINDOWS/system32$ ip a
(WSL2のIPアドレスを確認)
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: bond0: <BROADCAST,MULTICAST,MASTER> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether ba:c3:7a:e9:4c:db brd ff:ff:ff:ff:ff:ff
3: dummy0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 82:cc:a0:ef:72:7c brd ff:ff:ff:ff:ff:ff
4: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
    link/sit 0.0.0.0 brd 0.0.0.0
5: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:15:5d:9b:47:a3 brd ff:ff:ff:ff:ff:ff
    inet 172.29.81.79/20 brd 172.29.95.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::215:5dff:fe9b:47a3/64 scope link
       valid_lft forever preferred_lft forever
umesan@MyComputer:/mnt/c/WINDOWS/system32$
(→IPは「172.29.81.79」と確認できた!)

umesan@MyComputer:/mnt/c/WINDOWS/system32$ sudo service postgresql start
[sudo] password for umesan:(パスワードを入力)
 * Starting PostgreSQL 12 database server     
 (↑Postgre 12 だと確認できた!)                                                                   

umesan@MyComputer:/mnt/c/WINDOWS/system32$ sudo -u postgres psql
psql (12.7 (Ubuntu 12.7-0ubuntu0.20.04.1))
Type "help" for help.

postgres=#

我输入在DBeaver中的信息如下。

データベースpostgresを右クリック
↓
編集 接続
↓
・Server>Host=172.29.81.79
・Server>Port=デフォルトのまま「5432」。
・Server>Database=「postgres」
・認証>ユーザー名=postgres  (linux userの「postgres」)
・認証>パスワード=linux user「postgres」作成時に設定したパスワードを入力。
↓
「OK」

错误。和刚才一样的错误。
请确认主机名和端口号正确,并确保postmaster正在接受TCP/IP连接。
连接被拒绝至172.29.81.79:5432。

为什么连接不上???
是因为 PostgreSQL 没有启动吗?
但是在 VSC 中已经显示了 “postgres=#”。
我以为这意味着 PostgreSQL 已经启动了,难道不是吗??

邮件管理员是什么?

邮件管理员是PostgreSQL的多用户数据库服务器。它是一个服务器进程(父进程)。

什么是多用户数据库服务器?

多用户数据库服务器是指多个用户可以根据各自的标识信息和配置来使用的数据库服务器。

什么是服务器进程?

服务器进程是指在服务器上运行的程序。进程与任务具有相同的意义。

(下文参考自相关文章。)

从DBeaver无法连接到postgres数据库。→ 假设:postmaster是否没有接受TCP/IP连接?

我在公式文件中发现了以下类似的文字。
这里有点可疑…感觉隐藏着一些提示。

客户端认证是由数据库集群数据目录中的一个名为pg_hba.conf的配置文件进行管理的(省略部分)。
记录采用7种格式之一(省略部分)。
host…database user address auth-method [auth-options](省略部分)
host…此记录对应通过TCP/IP进行的连接。host记录可对应SSL或非SSL连接。
注意:服务器的默认行为是仅监视本地回环地址localhost上的TCP/IP连接。因此,除非服务器在启动时将listen_addresses参数设置为适当的值,否则无法进行远程的TCP/IP连接。
(引用:PostgreSQL 9.3.2文档 > 第19章客户端认证 > 19.1. pg_hba.conf文件).

如果在服务器上以正确的值启动了listen_addresses参数,就可以进行远程的TCP/IP连接。这里有些可疑的地方,“远程的TCP/IP连接”。这是否与我当前正在尝试做的事情相关?我觉得解决的线索可能在这里……。

我目前正試圖通過TCP/IP連接將”WSL2(Ubuntu)中的PostgreSQL”連接到DBeaver,而不是使用localhost。
換句話說,如果在PostgreSQL服務器上未以正確的值設定聽取地址參數並啟動,則無法進行遠程TCP/IP連接。

在启动时,如何才能正确设置listen_addresses参数并连接到PostgreSQL服务器?

listen_addresses参数是什么意思?
listen_addresses参数的适当值是什么?

我会查看名为「pg_hba.conf」的文件的内容。
我参考了这个文件:「pg_hba.conf文件的设置方法」。

◆ pg_hba.conf文件的位置
据说它存储在安装PostgreSQL时默认的目录下的数据文件夹中。需要确认Ubuntu的目录吗?

在Ubuntu终端上运行”find”命令可以确认目录。
在”文件操作”中查找命令>find命令这个参考可以被用到。
当我在Ubuntu终端上运行”umesan@MyComputer:~\$ find”命令时,会返回大约200行的结果。
我试图通过运行”umesan@MyComputer:~\$ find . -name pg_hba.conf”命令来查找”pg_hba.conf”,但没有反应。
然后我运行”umesan@MyComputer:~\$ find pg_hba.cnf”命令,并得到了”find: ‘pg_hba.conf’: No such file or directory”的回复。

找不到。

换个方法,
尝试使用VSC的EXPLORER目视搜索,但是找不到。
是我漏看了吗?

根据所说,「pg_hba.conf」与「postgresql.conf」一样,默认情况下存储在安装PostgreSQL的目录内的data文件夹中。我尝试执行「cd data」,但无法成功移动。

现在,我正在使用VSC连接到Ubuntu的”postgres=#”。也就是说,毫无疑问,postgres本身存在于Ubuntu中。那么,我应该如何确认postgres的目录呢?

尝试通过「postgres=# show data_directory;」进行确认,但却收到了「未找到命令 ‘show’」的返回信息。

“listen_addresses参数是什么?”

↓文件↓

通过「listen_addresses参数」在谷歌上进行搜索。
找到了这篇文章。

当浏览同一人的文章时,我还发现了这样一篇文章。

这里最初从黑泽先生那里得到的指导”修改访问设置。从DBeaver连接到Ubuntu远程。”中的”修改访问设置”这部分让我感到困惑。
这可能指的是”修改PostgreSQL服务器的TCP/IP连接设置”吗?

我以为到目前为止,一直在谈论的是关于”DBeaver连接设置”的事情。我理解它指的是从连接信息为空的状态变为被输入的状态。

“listen_addresses参数的适当值是什么?”

在PostgreSQL的配置文件中,指定要监听的IP地址。将包含listen_addresses参数的行取消注释,并指定适当的值。例如,要监听所有地址,将listen_addresses设置为’ * ‘。(引用:IBM)

教材上的“连接与认证”

教材中提到了将 listen_addresses 设置为 ‘*’ 的说明!

1. 进行postgresql.conf中的listen_addresses设置
为了接受网络连接,需在postgresql.conf中进行listen_addresses的设置,并重新启动PostgreSQL。
默认情况下,listen_addresses = ‘localhost’,只允许本地回环连接。
将值设置为”*(星号)”可以接受来自主机提供的所有接口的连接。教科书中的描述为
“[postgres@localhost~]\$ vi \$ PGDATA/postgresql.conf”
随后是
“—–
#listen_addresses = ‘localhost’ # what IP address(es) to listen on;
listen_addresses = ” # what IP address(es) to listen on; # comma-separated list of addresses; # defaults to ‘localhost’, ” for all # (change requires restart)
#port = 5432 # (change requires restart)”

2. 设置pg_hba.conf中的主机访问控制
同时,也需要进行连接认证的设置。
设置pg_hba.conf中的主机访问控制。
pg_hba.conf的设置可以通过重新加载来生效,但由于这里也修改了listen_addresses,所以需要重新启动PostgreSQL来使这两个设置都生效。

教科书中的描述为”配置ossdb数据库中sato用户通过网络连接进行密码认证”,并在描述中写明了
“[postgres@localhost~]\$ vi \$ PGDATA/pg_hba.conf”
随后是
“#TYPE DATABASE USER ADDRESS METHOD
#”local” is for Unix domain socket connections only
local all all scram-sha-256
# IPv4 local connections:
host ossdb sato 0.0.0.0/0 scram-sha-256
host all all 127.0.0.1/32 scram-sha-256
# IPv6 local connections:
host all all ::1/128 scram-sha-256″

找到postgresql.conf和pg_hba.conf。

如果不知道这两个文件的目录在哪里,就无法继续进行。
这篇文章中有这样一句话。

让我们在Ubuntu上尝试使用PostgreSQL(3)
(中略)
(2)配置文件
配置文件位于/etc/postgresql目录下。有几个文件,但我们要修改的是postgresql.conf文件。
(引用来源:Let’s POSTGRES PostgreSQL信息门户网站)

根据之前收到的信息,据说数据存储在“data目录”中,但是这里却显示着“/etc/postgresql目录”!

我阅读了某位正在进行同样课题的学习记录,其中提到了一个目录。我参考这个目录并在谷歌上搜索了”/etc/postgresql”,然后就找到了上述的文章。

【某先生学习记录的提示】
① 修改两个文件:
・/etc/postgresql/12/main/pg_hba.conf
・/etc/postgresql/12/main/postgresql.conf
② 完成这个任务需要使用命令进行移动,以及使用默认安装在Ubuntu上的文本编辑器”vi”进行操作。

多亏了这个提示,我找到了目录。某位先生,您是如何找到这个目录名的呢?
而且,也是通过阅读某位先生的学习记录,我才第一次知道了”vi”的存在。您是如何找到那里的呢?

我感到有一些后悔看到了答案,但还是感激地打算按照这个提示继续前进。

→【某さん的回答】
我在任务资料中找到了链接(↓)!我查找了pg_hba.conf和postgresql.conf是什么,结果一下子迷失了方向,并且离开了链接的核心内容…我本应该按照资料的指示先进行尝试的。

在给定的链接中,指示将“postgresql.conf”文件中的“listen_addresses =’localhost’”更改为“listen_addresses =’0.0.0.0’”。然而,标准教科书指示将其更改为“ ‘*’ ”。这两者之间有什么区别?

‘0.0.0.0’ と ‘*’ の違い’0.0.0.0’全てのアドレスとマッチする。全てのホスト、任意の宛先を意味する。来る者拒まず去る者追わず、といった動作をする。(引用元:通信用語の基礎知識)’*’ホストが用意しているすべてのインターフェースからの接続を受け付けるようになる。(引用元:標準教科書―7.3_ネットワーク経由接続)

→虽然不太清楚,但是”0.0.0.0″的覆盖范围更广?那就这次使用”0.0.0.0″吧!

找不到pg_hba.conf文件的命令:
find / -name pg_hba.conf
find / pg_hba.conf
find -type f postgresql.conf
find postgresql.conf -type f
find postgresql.conf -type d
还有一些不相关的文件也显示在VSC中,让我感到很焦急。使用”Ctrl + c”强制结束了这个显示。

成功的命令
umesan@我的电脑:~$ find /etc/postgresql
(以下是返回的结果)
/etc/postgresql
/etc/postgresql/12
/etc/postgresql/12/main
/etc/postgresql/12/main/pg_hba.conf
/etc/postgresql/12/main/pg_ctl.conf
/etc/postgresql/12/main/start.conf
/etc/postgresql/12/main/environment
/etc/postgresql/12/main/conf.d
/etc/postgresql/12/main/postgresql.conf
/etc/postgresql/12/main/pg_ident.conf

由于找到了我所寻找的目录,可以进行下一步操作了。需要修改两个文件(①②)。

(2021/9/4更新:
↓我找到了有关查找pg_hba.conf的文章,做了笔记
https://postgresweb.com/how-to-find-pg_hba-conf)

修改两个设置文件(postgresql.conf、pg_hba.conf)

修改 “postgresql.conf” 和 “pg_hba.conf” 文件,以便从 DBeaver 连接到 Ubuntu(WSL2) 上的 PostgreSQL 数据库。

使用Linux自带的文本编辑器”vi”,请记下相关的使用命令。

【vi命令】

やりたいこと方法参考元viでファイルを開くvi+ファイル名https://language-and-engineering.hatenablog.jp/entry/20121207/p1検索コマンドモードで,スラッシュ・文言でEnterhttps://language-and-engineering.hatenablog.jp/entry/20121207/p1コマンドモード→編集モードへ切替ihttps://language-and-engineering.hatenablog.jp/entry/20121207/p1保存しないで終了(書き間違えてしまったときに使う!):q!https://docs.oracle.com/cd/E19253-01/816-3946/editorvi-12/index.html保存:whttps://language-and-engineering.hatenablog.jp/entry/20121207/p1終了:qhttps://language-and-engineering.hatenablog.jp/entry/20121207/p1保存&終了:wqhttps://docs.oracle.com/cd/E19253-01/816-3946/editorvi-11/index.html編集モード→コマンドモードへ切替Eschttps://language-and-engineering.hatenablog.jp/entry/20121207/p1強制脱出(E45: ‘readonly’ option is set (add ! to override)が出たら):w !sudo tee %https://qiita.com/maedatakumi/items/220f747307f773bceb02#e45-readonly-option-is-set-add–to-override%E3%81%8C%E5%87%BA%E3%81%9F%E3%82%89

① /etc/postgresql/12/main/postgresql.conf
修改前:#listen_addresses = ‘localhost’
修改后:listen_addresses = ‘0.0.0.0’

变更方式:
在WSL2的终端中执行以下操作:
umesan@MyComputer:~\$ cd /etc/postgresql/12/main

执行以下操作:
umesan@MyComputer:/etc/postgresql/12/main\$ vi postgresql.conf
(使用vi命令打开postgresql.conf文件)

(将postgresql.conf文本文件展示在WSL2终端中)
在命令模式下使用/listen+Ener命令来搜索listen_address

当前显示的是命令模式。
按下i键,切换到编辑模式。

<<文件内容丢失错误发生!→请参考下面的Qiita文章>>

删除注释命令,并将’local host’ 改为 ‘0.0.0.0’。
使用方向键移动光标,不可使用鼠标。
通过按下Esc键切换到命令模式。
按下:w键保存。
错误发生!
“E45:设置了’readonly’选项(添加!以覆盖)”
通过:w !sudo tee %强制退出。
通过:q!退出。
通过vi postgresql.conf确认修改是否正确应用。
修改正确应用。
完成!

② /etc/postgresql/12/main/pg_hba.conf
打开文本编辑器vi并编辑配置文件”/etc/postgresql/12/main/pg_hba.conf”,进行如下更改:
更改前:host all all 127.0.0.1/32 md5
更改后:host all all all   md5

(对黑泽先生提供的资料进行变更内容说明)

变更方法(失败案例):
在WSL2终端中执行以下操作:
umesan@MyComputer:~\$ cd /etc/postgresql/12/main

执行以下操作
umesan@MyComputer:/etc/postgresql/12/main\$ vi pg_hba.conf
(使用vi打开postgresql.conf文件)

(在WSL2终端中展开了postgresql.conf文本文件)

<<发生了文件内容消失的意外情况!请参考下方的Qiita文章>>

100.png
200.png

虽然这次对pg_hba.conf的更改方法与之前不同,但由于也对下面的文章感兴趣,所以做个备忘录。
[PostgreSQL]访问控制设置以便外部从数据源连接-计算机星组
(改变的方式在这篇文章中:
默认设置:trust(每一行都有?处。)
这样改变:md5(全部?处。))
→ 这篇文章接着写着“下面我们来做用于外部连接的访问控制设置。
在文件末尾添加一个包含指定允许外部连接的角色、连接目标数据库和发出连接请求的IP地址的参数行。”文章中还举了一个例子,“允许来自192.168.33.0/24网段的客户端以sample_user角色连接sample_db数据库”,但由于我们目前不清楚其必要性,故未执行。

在DBeaver中输入连接信息

在DBeaver中输入连接信息,在DBeaver上远程连接Ubuntu(WSL2)中的PostgreSQL。

在Ubuntu中运行code .命令以启动VSCode,
然后在VSCode中运行sudo service postgresql start和sudo -u postgres psql命令,
确保PostgreSQL已在Ubuntu(WSL2)上成功启动。

10.png

【确认两个配置文件的设置】为了安全起见,确认修改过的两个配置文件(postgresql.conf、pg_hba.conf)是否被正确修改。(因为在进行设置后,我关闭了电脑,过了一天,担心设置是否被改变,所以进行确认)
→ 确实被修改了。那为什么还是无法连接呢?

【假设1】(可能错误)
由于主机(Win10)的防火墙未开放5432端口。
→因为我想连接的端口是WSL2中Ubuntu的5432端口,所以主机无关紧要。因此,我认为这个假设是错误的。

【确认位置关系】
再次确认一下位置关系。↓我认为是这个样子。

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3439383035372f30663937316435652d613063322d383436642d613866382d3661323232313433313135612e6a706567.jpg

PostgreSQL也已经启动了。无法连接的原因,我无法再想出其他的假设了…。

【黒泽先生的建议】
“连接方式本身是正确的。可以怀疑pg_hba的设置可能没有生效。
先恢复到之前的设置,如果错误信息没有变化,那就怀疑设置错误或者没有生效的可能性。”

「我对pg_hba的设置和vim操作感觉有些可疑,所以我想要在编辑之前和之后都用cat命令备份一下。」

试一试。
【①查看pg_hba→②恢复到设置之前的状态→③查看→④检查DBeaver连接信息输入时的错误】

umesan@MyComputer:/etc/postgresql/12/main$ sudo cat pg_hba.conf
(cat コマンド=ファイルの閲覧)
(→ csvファイルの内容がダダ―っとターミナルに表示された)
4.png
8.png
4 - コピー1.png

【解决错误,尝试1(重新启动PostgreSQL)】→没有成功

错误:用户”andym”的密码认证失败。
这种类型的错误消息表示,已经与服务器建立了联系并允许服务器进行通信,但未通过在pg_hba.conf文件中指定的身份验证方式。请检查输入的密码,如果错误指出是Kerberos或ident身份验证类型之一,请检查Kerberos或ident软件。

在文本中并没有提及后半部分关于Kerberos的信息,而且密码也是正确的。

为了使listen_addresses的设置更改生效,需要重新启动(而不是重新加载)PostgreSQL。在文件更改后,请记得执行以下命令进行重新启动:
service postgresql restart
(引用自:OSS-DB入門)

在过去的一段时间里,我一直使用了错误的方法来关闭PostgreSQL,即在\q之后(在输入’sudo service postgresql start’之前或者没有输入该命令)通过’sudo -u postgres psql’来重新连接。现在我想试试所提供的命令。

umesan@MyComputer:~$ sudo -u postgres service postgresql restart
 * Restarting PostgreSQL 12 database server                                                                                                                     
umesan@MyComputer:~$ 
100.png

【解决错误 挑战2(尝试重新设置密码)】→成功!
尝试重新设置postgres的密码。

200.png

连接成功!!!!

使用DBeaver引用「KEN_ALL.CSV」的数据。

10002.png

結論

我花了相当长的时间,但总算能连接上了。在遇到错误时,我需要调查是因为什么造成了错误、错误的内容以及出现的术语和功能等等……与其动手解决问题,花在调查上的时间更长。判断哪些信息适用于自己的情况也耗费了很多时间。

我希望能够更快地搜索、选择、尝试和验证必要的信息,并且循环地继续搜索、尝试…。

◆从postgres配置失败中得到的教训◆
在更改配置文件时,应该提前备份原文件和更改后的文件。
→ 我对Ubuntu的文件处理方式不够了解。备份文件的方法等,我会在另一篇文章中总结。
(2021/9/20补充:已总结如下↓)

<备忘录>
◆更改设置文件时的习惯◆
“最近使用Docker每次都能轻松地构建环境,但以前我们会使用简单的编程语言实现自动化。在更改设置文件之前,通常会将”abc.config”文件复制为”abc_original.config”,这是一种常见的做法。”——黑泽先生

◆ 从 VSC 连接至 Postgress 的方法 ◆
黑泽先生向我介绍了这种方法,并附上了以下视频↓
“在 Visual Studio Code 中运行 MySQL 数据库查询”

试听一下,通过在VSC中添加工具,可以使用VSC的功能来实现“不再通过DBeaver连接,而是通过WSL2连接DBeaver”的功能。这样的理解对吗?

如果是为了学习而使用的话那就很好了。如果顺利的话,我觉得可以考虑废除Dbver。因为它不需要外部连接,所以设置应该不需要,会更方便。
现在在编程世界中,工具越来越集中在VSC上。版本控制的Git等也已经整合到了VSC中,大家都在使用它。
接下来我会尝试用这个视频中的方法将VSC连接到Postgress!(个人备忘录:写到私人文章里)
然后,继续推进标准教科书的学习。

广告
将在 10 秒后关闭
bannerAds