[LINUX] Erstellen Sie PostgreSQL aus dem Quellcode

Einführung

Ich habe in dem Projekt, an dem ich zuletzt beteiligt war, über PostgreSQL gesprochen. Ich denke, es ist ungefähr 5 Jahre her, seit ich Postgre nicht berührt habe. Ich erinnere mich nicht genau, aber ich denke, der letzte, den ich benutzte, war die 9er Serie. Ich dachte, ich würde nach Hause gehen und nachschlagen, aber ich fragte mich, wo ich nachschlagen sollte. Lassen Sie uns aus der Quelle bauen! Ich beschloss zu teilen, was ich tat. Dieses Mal habe ich es auf Ubuntu 18.04 gebaut. Übrigens habe ich das Ubuntu-Image mit Docker gezogen. Docker ist mir täglich zu Dank verpflichtet.

Hinzugefügt am 8. März: </ font> Es wurde hinzugefügt, wie auf ** CentOS ** aufgebaut werden kann. Ich habe Centos: 7 mit Docker wie oben gezogen.

Die Art und Weise, Ubuntu und CentOS zu erstellen, ist genau die gleiche. Der einzige Unterschied ist der anfängliche Befehl zur Paketinstallation.

PRE INSTALLATION

① Aktualisieren Sie die Paketliste

Aktualisieren Sie zunächst die Datenbank, die das Paket verwaltet. (Das Paket selbst wird nicht aktualisiert.)

Ubuntu.Befehl


root@2b4511afa430:/# apt-get update
Get:1 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
Get:2 http://archive.ubuntu.com/ubuntu bionic InRelease [242 kB]
Get:3 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
....
....
  • CentOS wird übersprungen.

② Installation der Build-Bibliothek

Die zum Erstellen erforderlichen Bibliotheken werden auf der folgenden Seite beschrieben. https://www.postgresql.org/docs/12/install-requirements.html

  • Da diesmal 12.2 erstellt werden soll, handelt es sich um die oben angegebene URL. Sie können es installieren, indem Sie auf die obige Site verweisen, aber ich habe alles auf einmal mit dem folgenden Befehl eingegeben.

Ubuntu.Befehl


# apt-get install build-essential

CentOS.Befehl


# yum groupinstall "Development Tools"

Es gibt zwei weitere wichtige Pakete. Es ist möglich, ohne sie zu bauen, aber andererseits können einige nützliche Funktionen nicht verwendet werden.

  1. readline: Ein Werkzeug, das den Verlauf von Befehlen anzeigt, wenn die Pfeiltasten gedrückt werden.
  2. zlib: Tools, die von pg_dump und pg_restore zum Komprimieren von Daten verwendet werden

Ubuntu.Befehl


# apt-get install libreadline-dev zlib1g-dev

CentOS.Befehl


# yum install readline-devel zlib-devel

③ Quelle herunterladen

Laden Sie die Quelle für die Version, die Sie erstellen möchten, über den folgenden Link herunter. https://www.postgresql.org/ftp/source/ Dieses Mal werde ich 12.2 verwenden. Laden Sie den folgenden Befehl herunter und entpacken Sie ihn.

# cd /usr/local/src/

# wget https://ftp.postgresql.org/pub/source/v12.2/postgresql-12.2.tar.gz

# tar zxf postgresql-12.2.tar.gz
                                                                                                                                   
  • Wenn "wget" nicht vorhanden ist, installieren Sie es mit dem folgenden Befehl.

Ubuntu.Befehl


# apt-get install wget

CentOS.Befehl


# yum install wget

INSTALLATION Es ist endlich Zeit zu bauen. ① configure Dieses Mal bereiten wir ein separates Verzeichnis für die Erstellung vor. Auf diese Weise können Sie das Verzeichnis löschen und neu erstellen, wenn etwas schief geht, damit die vorherigen Daten nicht im Weg stehen.

root@2b4511afa430:/usr/local/src# cd postgresql-12.2
root@2b4511afa430:/usr/local/src/postgresql-12.2# mkdir tmp_build_dir
root@2b4511afa430:/usr/local/src/postgresql-12.2# cd tmp_build_dir/
root@2b4511afa430:/usr/local/src/postgresql-12.2/tmp_build_dir#  

Führen Sie den folgenden Befehl von diesem Speicherort aus.

/usr/local/src/postgresql-12.2/configure --prefix=/opt/postgresql12

** --prefix ** wird später angezeigt, aber wichtige Dateien wie ausführbare Dateien und Bibliotheksdateien werden in dem hier angegebenen Verzeichnis installiert.

  • Wenn Sie mehr wissen möchten, googeln Sie bitte mit "--prefix".

Wir führen hier die Datei "configure" im Quellverzeichnis aus und überprüfen die für die Installation erforderlichen Umgebungsvariablen und Bibliotheken. Als Ergebnis der Überprüfung wird MakeFile erstellt.

② make Als nächstes kompilieren Sie basierend auf dem von configure erstellten MakeFile.

# make

Es wird einige Zeit dauern, aber es ist in Ordnung, wenn am Ende die folgende Meldung angezeigt wird.

Kürzung
make[1]: Entering directory '/usr/local/src/postgresql-12.2/tmp_build_dir/config'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/usr/local/src/postgresql-12.2/tmp_build_dir/config'
All of PostgreSQL successfully made. Ready to install.

③ install Installieren Sie dann das oben kompilierte in dem durch ** --prefix ** angegebenen Verzeichnis.

# make install

Wenn Sie die folgende Meldung sehen, ist sie in Ordnung.

Kürzung
/usr/bin/install -c -m 755 /usr/local/src/postgresql-12.2/config/missing '/opt/postgresql12/lib/pgxs/config/missing'
make[1]: Leaving directory '/opt/temp/build_dir/config'
PostgreSQL installation complete.

Der Inhalt des Installationsziels lautet wie folgt.

postgresql12/
|-- bin
|-- include
|-- lib
`-- share

POST INSTALLATION

① Zur Umgebungsvariablen hinzufügen

Fügen Sie das Verzeichnis mit den ausführbaren Dateien zu Ihrem PATH hinzu, damit jedes Tool von überall ausgeführt werden kann. ](Https://qiita.com/dakc/items/e26d7540c98e59c6b101)

export PATH=/opt/postgresql12/bin:$PATH

Die obige Methode ist vorübergehend. Wenn Sie das Timing beendet haben, kehrt der Wert von PATH zum ursprünglichen Wert zurück. Wenn Sie möchten, dass es immer gespeichert wird, müssen Sie den obigen Befehl zu der Datei hinzufügen, die beim Start ausgeführt wird. Zum Beispiel ~ / .bash_profile, / etc / profile ,,

① Benutzer hinzufügen

Auf der offiziellen Website wird empfohlen, den Zugriff auf DB-Daten auf nur einen dedizierten Benutzer zu beschränken. ..

As with any server daemon that is accessible to the outside world, it is advisable to run PostgreSQL under a separate user account. This user account should only own the data that is managed by the server, and should not be shared with other daemons.

Fügen Sie einen neuen Benutzer "postgres" hinzu.

# useradd postgres

Unter / home wird ein Home-Verzeichnis für den Benutzer "postgres" erstellt. Wenn es nicht erstellt wurde, löschen Sie es mit ** userdel postgres ** und geben Sie das Home-Verzeichnis wie unten gezeigt an.


# useradd --create-home --home-dir /home/posgtres postgres
# ls -al /home
total 12
drwxr-xr-x 1 root     root     4096 Mar  8 04:32 .
drwxr-xr-x 1 root     root     4096 Mar  8 04:12 ..
drwx------ 2 postgres postgres 4096 Mar  8 04:32 posgtres
  • Erstellen Sie ein "Daten" -Verzeichnis direkt unter diesem Ausgangsverzeichnis und speichern Sie die DB-Daten. Ich denke, dass "/ var / lib / pgsql / data" und "/ usr / local / pgsql / data" häufig sind. Eine Sache, die Sie hier beachten sollten, ist ** Eigentum **. Autorisieren Sie, wie oben erwähnt, nur den Benutzer "postgres", damit andere Benutzer nicht darauf zugreifen können.

② Dateninitialisierung

Bereiten Sie dann die Daten und Konfigurationsdateien vor, die zum Starten des Datenbankservers erforderlich sind. Auf der offiziellen Website wird sorgfältig Folgendes angegeben.

Before you can do anything, you must initialize a database storage area on disk. We call this a database cluster. (The SQL standard uses the term catalog cluster.) A database cluster is a collection of databases that is managed by a single instance of a running database server. After initialization, a database cluster will contain a database named postgres, which is meant as a default database for use by utilities, users and third party applications. The database server itself does not require the postgres database to exist, but many external utility programs assume it exists. Another database created within each cluster during initialization is called template1. As the name suggests, this will be used as a template for subsequently created databases; it should not be used for actual work.

Dieser Prozess wird von dem zuvor erstellten Benutzer "postgres" ausgeführt.

# su postgres

Es gibt andere Möglichkeiten, die Daten zu initialisieren, aber ich werde "pg_ctl" verwenden. Mit diesem ** One-Befehl ** können Sie Folgendes tun. ・ Datenbankinitialisierung ・ Starten Sie den Server ・ Stoppen Sie den Server ・ Starten Sie den Server neu Und so weiter Führen Sie zunächst den Initialisierungsprozess mit dem folgenden Befehl aus. ** - pgdata ** gibt das Verzeichnis an, in dem die Daten erstellt werden. Es wird erstellt, auch wenn der angegebene Ordner nicht vorhanden ist, der Benutzer "postgres" jedoch über eine Erstellungsberechtigung verfügen muss. Dieses Mal wird "Daten" direkt unter "/ home / postgres" angegeben. Wenn Sie die Berechtigungen überprüfen, als Sie den Benutzer oben erstellt haben, können Sie sehen, dass "/ home / postgres" über alle Berechtigungen verfügt (Lesen, Schreiben, Ausführen).

$ pg_ctl --pgdata=/home/posgtres/data initdb
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
...
...Kürzung
Success. You can now start the database server using:

    /opt/postgresql12/bin/pg_ctl -D /home/posgtres/data -l logfile start
  • Sie können --pgdata auch als -D schreiben.

③ Starten Sie den Server

Wie Sie vielleicht bereits bemerkt haben, wird der Befehl zum Starten des DB-Servers tatsächlich ganz am Ende angezeigt, als der Initialisierungsprozess zuvor ausgeführt wurde. Mit Ausnahme des Parameters ** -l ** ist der Initialisierungsbefehl genau der gleiche. Der letzte Parameter ist jedoch "start" anstelle von "initdb". Geben Sie eine Protokolldatei für -l oder --log an. Hier ist ein Punkt zu beachten. Der Benutzer "postgres" muss über die Berechtigung zum Erstellen von Protokolldateien in dem hier angegebenen Pfad verfügen. Führen Sie unter Berücksichtigung dieser Faktoren den folgenden Befehl aus, um den DB-Server zu starten.

$ pg_ctl --pgdata=/home/posgtres/data --log=/home/posgtres/db.log start
waiting for server to start.... done
server started
  • Der Server wird übrigens auch dann gestartet, wenn Sie -l oder --log nicht angeben.

④ Stoppen Sie den Server

Es ist einfach, den DB-Server zu stoppen. Geben Sie einfach am Ende den Stopp an.

$ pg_ctl --pgdata=/home/posgtres/data stop

pg_ctl ist neben dem Starten und Stoppen auch für andere Zwecke nützlich. Weitere Informationen finden Sie in der Hilfe.

[postgres@af6184923e89 /]$ pg_ctl --help
pg_ctl is a utility to initialize, start, stop, or control a PostgreSQL server.

Usage:
  pg_ctl init[db]   [-D DATADIR] [-s] [-o OPTIONS]
  pg_ctl start      [-D DATADIR] [-l FILENAME] [-W] [-t SECS] [-s]
                    [-o OPTIONS] [-p PATH] [-c]
  pg_ctl stop       [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]
  pg_ctl restart    [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]
                    [-o OPTIONS] [-c]
  pg_ctl reload     [-D DATADIR] [-s]
  pg_ctl status     [-D DATADIR]
  pg_ctl promote    [-D DATADIR] [-W] [-t SECS] [-s]
  pg_ctl logrotate  [-D DATADIR] [-s]
  pg_ctl kill       SIGNALNAME PID

...Kürzung

⑤ Verbindung zur Datenbank

Starten Sie zunächst den DB-Server unter Bezugnahme auf (3) oben.

$ pg_ctl -D /home/posgtres/data -l /home/posgtres/db.log start
waiting for server to start.... done
server started

Hier wird der Befehl "psql" hinzugefügt. Es scheint ein interaktives PostgreSQL-Terminal zu sein, aber Sie können es sich als ein Tool vorstellen, das das Terminal verwendet, um die Datenbank abzufragen und die Ergebnisse anzuzeigen. Bei der Initialisierung der Datenbank wird eine Datenbank mit dem Namen "postgres" erstellt. Führen Sie einfach den Befehl psql aus, um eine Verbindung zu dieser Datenbank herzustellen. Auch hier ist zu beachten, dass Sie zum Benutzer "posgres" wechseln und ausführen müssen.

$ psql
psql (12.2)
Type "help" for help.

postgres=#

  • Obwohl die Parameter oben weggelassen wurden, können verschiedene Spezifikationen wie folgt vorgenommen werden. Versuchen Sie ** psql --help ** auszuführen.
$ psql --host=localhost --port=5432 --username=postgres --no-password --dbname=postgres

Um psql zu beenden, geben Sie "\ q" ein und drücken Sie die Eingabetaste.

$ psql
psql (12.2)
Type "help" for help.

postgres=# \q
$

Schließlich

Ich schrieb über das Erstellen von PostgreSQL und das Herstellen einer Verbindung zum Server. Ich hoffe es wird für Sie hilfreich sein.

Recommended Posts

Erstellen Sie PostgreSQL aus dem Quellcode
Installieren Sie PostgreSQL aus dem Quellcode unter CentOS
Installieren Sie Python von der Quelle
Installieren Sie Apache 2.4.41 von der Quelle
Installieren Sie ansible aus dem Quellcode
Für die Erstellung der SciPy 1.4-Quelle ist pybind11 erforderlich
Docker Engine --CE-Quell-Build
Installieren von Apache Maven (von der Quelle)
Installieren Sie Python von der Quelle mit Ansible
Kompilieren und installieren Sie Git aus dem Quellcode.
[Hinweis] Mit Python Daten von PostgreSQL abrufen
Fluss vom Quellcode zum Erstellen des Ausführungsformats