Postgresql

為什麼我的 Postgres 數據庫工作了一段時間,然後重新啟動後無法“啟動伺服器”?

  • March 18, 2021

最近,我開始使用舊的 Raspberry Pi 3 b+,我認為在我的本地網路上託管一個 Postgres 數據庫並將其用於我想要完成的任何工作都是一個好習慣。我知道在具有 1GB 記憶體的 Raspberry Pi 上執行 Postgres 並不理想,並且可能會對 SD 卡造成影響,但我已經更新了 postgresql.conf 文件並指定數據目錄路徑是使用 1TB SSD。此外,我安裝了 zram 和 log2ram 來嘗試減少 SD 卡上的一些成本。

我正在使用的技術概述:

  • Raspberry Pi 4 B
  • Postgres 12
  • Ubuntu 伺服器 20.04(沒有 gui,只能從終端工作)
  • 1TB固態硬碟

昨天,我正在從 python 筆記本寫入 Postgres 數據庫,沒有任何問題,但是一旦我重新啟動 Raspberry Pi,我就無法從 DataGrip 訪問數據庫,並且會從我的 Ubuntu 終端收到以下錯誤:

psql: error: could not connect to server: No such file or directory
   Is the server running locally and accepting
   connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

我檢查了 postgres 伺服器的狀態,這似乎沒問題…:

● postgresql.service - PostgreSQL RDBMS
    Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
    Active: active (exited) since Thu 2021-01-28 13:34:41 UTC; 20min ago
   Process: 1895 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
  Main PID: 1895 (code=exited, status=0/SUCCESS)

Jan 28 13:34:41 ubuntu systemd[1]: Starting PostgreSQL RDBMS...
Jan 28 13:34:41 ubuntu systemd[1]: Finished PostgreSQL RDBMS.

這是 postgresql-12-main.log 中提供的內容:

2021-01-28 13:17:23.344 UTC [1889] LOG:  starting PostgreSQL 12.5 (Ubuntu 12.5-0ubuntu0.20.04.1) on aarch64-unknown-linux-gnu, compiled by gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, 64-bit
2021-01-28 13:17:23.362 UTC [1889] LOG:  listening on IPv4 address "0.0.0.0", port 5432
2021-01-28 13:17:23.362 UTC [1889] LOG:  listening on IPv6 address "::", port 5432
2021-01-28 13:17:23.365 UTC [1889] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2021-01-28 13:17:23.664 UTC [1899] LOG:  database system was shut down at 2021-01-28 01:43:38 UTC
2021-01-28 13:17:24.619 UTC [1899] LOG:  could not link file "pg_wal/xlogtemp.1899" to "pg_wal/000000010000000000000002": Operation not permitted
2021-01-28 13:17:24.670 UTC [1899] FATAL:  could not open file "pg_wal/000000010000000000000002": No such file or directory
2021-01-28 13:17:24.685 UTC [1889] LOG:  startup process (PID 1899) exited with exit code 1
2021-01-28 13:17:24.686 UTC [1889] LOG:  aborting startup due to startup process failure
2021-01-28 13:17:24.708 UTC [1889] LOG:  database system is shut down
pg_ctl: could not start server
Examine the log output.

我認為這可能與權限有關。如果我嘗試將 ~30MB 的 csv 上傳到 postgres 數據庫,它會崩潰並且伺服器不會再次啟動,因為文件無法寫入 pg_wal 目錄。該目錄中的唯一文件是 000000010000000000000001 並且在寫入表時不會移動到 000000010000000000000002 等。

如果您有任何問題或希望我提供任何其他資訊,請告訴我。我很感激您提前提出的任何指示。

好吧,我想我已經想通了。可能是矯枉過正,但它的工作原理:

  1. 我做的第一件事是格式化並安裝我的 1TB SSD。是一個很好的影片,用於格式化為 ext4 和安裝。影片之間的區別在於,我更新了 fstab 文件以在啟動期間檢查我的 SSD,或者在 SSD 掛載選項末尾的“0 2”而不是“0 0”。
  2. 其次,我安裝了 Postgres。是一個很好的演練。該部落格中提供的指導超出了我的需要,但仍然是一個很好的演練。我只是安裝了 Postgres:
sudo apt install postgresql postgresql-contrib
  1. 第三,我按照這個演練直到第二步結束,但在開始第二步之前,我通過執行添加了一個符號連結 from /var/lib/postgresql/12/mainto /YOUR/MOUNT/POSITION/postgresql/12/main
ln -s /var/lib/postgresql/12/main /YOUR/MOUNT/POSITION/postgresql/12/main
  1. 最後,在重新啟動 postgres 伺服器之前,我使用了這個網站來幫助我更好地配置我的伺服器。輸入您的規格,它應該為您提供一些有用的配置設置。

引用自:https://dba.stackexchange.com/questions/284780