[Grundlegende Einführung in Postgresql] So erstellen Sie eine Datenbank, Speicherort, bestimmen die Zugriffsbenutzer und den Umfang Ihrer eigenen Daten

Datenbank erstellen

Inhalt der Spalte :

Open- Source-Beiträge :

Persönliche Homepage : Meine Homepage
Management-Community : Open-Source-Datenbank
Motto: Wenn der Himmel stark ist, strebt ein Gentleman nach Selbstverbesserung; wenn das Gelände gut ist, trägt ein Gentleman große Tugenden.

Artikelserie

Vorwort

Bei der Postgresql-Datenbank handelt es sich um allgemeine relationale Daten, die mit kommerziellen Daten in Open-Source-Datenbanken vergleichbar sind und in der Branche immer beliebter werden.

Da es sich um eine Open-Source-Datenbank handelt, wird nicht nur der Quellcode offengelegt, sondern es gibt auch viele Anwendungsfälle und benutzerfreundliche Plug-Ins, sodass es sich nach und nach zum Pionier und Standard für Datenbanken entwickelt hat. Mit Postgresql können Sie dies gründlich tun es vom Gebrauch bis zu den Prinzipien verstehen;

Wenn Sie Programmieren lernen, können Sie auch eine Fülle von Programmierkenntnissen, Datenstrukturen und Programmierkenntnissen erlernen. Darüber hinaus gibt es viele exquisite Architekturentwürfe, vielschichtige Ideen und Ideen, die flexibel angepasst werden können.

In dieser Kolumne wird hauptsächlich die Einstiegsverwendung von Postgresql sowie die Datenbankwartung und -verwaltung vorgestellt. Durch diese Verwendung können Sie die Prinzipien der Datenbank verstehen und langsam verstehen, was für eine Datenbank Postgresql ist, was sie kann und wie sie Gutes bietet Dienstleistungen. Das Wichtigste ist, dass dieses Wissen alle im Interview vorhanden ist. Erforderliche Elemente.

Überblick

In diesem Artikel wird hauptsächlich die grundlegende Architektur von PostgreSQL erläutert, um uns das Verständnis dafür zu erleichtern, wie die Komponenten von PostgreSQL miteinander interagieren. Dies erleichtert das Verständnis dieses Abschnitts und vermeidet Verwechslungen mit anderen Datenbanktypen, wenn wir ihn verwenden.

Überblick

Voraussetzung für die Nutzung von Datenbankdiensten ist die Angabe eines Datenbankobjekts. Diese Datenbank ist Träger anderer Datenbankobjekte bzw. der übergeordnete Namensraum.
In diesem Artikel werden verschiedene Methoden zum Erstellen einer Datenbank und zum Erteilen von Berechtigungen für Benutzer zur Verwendung der Datenbank beschrieben.

Prinzipielle Einführung

Jeder denkt, dass das Erstellen einer Datenbank sehr einfach ist und nur eine SQL-Anweisung ausreicht. Müssen Sie die Prinzipien erklären?

Dann schauen wir uns diese Fragen an?

  • Der Ort, an dem die Datenbank gespeichert ist, ist dort;
  • Wem gehört die Datenbank?
  • Wie andere Benutzer auf diese Datenbank zugreifen;

Es scheint immer noch nicht einfach zu sein. Die Datenbank verfügt auch über einen Speicherort. Es handelt sich tatsächlich um ein Verzeichnis, in dem andere Datenbankobjekte gespeichert werden können, z. B. Tabellenobjekte in der Datenbank.

Natürlich handelt es sich bei der Datenbank um ein Verwaltungssystem, das verschiedene Arten von Datenbanken sammelt und speichert. Nicht alle Benutzer können nach Belieben darauf zugreifen und arbeiten. Dies hat der Eigentümer der Datenbank. Der Eigentümer verfügt über alle Berechtigungen der Datenbank, was ähnlich ist eine Verwaltung dieser Datenbank. Mitglied;

Ebenso gibt es viele Benutzer in der Datenbank, auf die nicht nach Belieben zugegriffen und sie bedient werden können. Der Administrator muss ihnen Berechtigungen zuweisen. Der Zugriff, der die Berechtigungen nicht erfüllt, wird verweigert. Genau wie das Management von Suhe gilt dies für Jungen nicht der Zutritt zum Mädchenschlafsaal gestattet.

Um nun die obigen Fragen durch Demonstration zu beantworten, sieht der ungefähre Prozess wie folgt aus:

  1. Melden Sie sich bei der Datenbank an.
  2. Führen Sie SQL aus, um die Datenbank zu erstellen.
  3. Neue Benutzer erstellen;
  4. Erteilen Sie dem neuen Benutzer die Berechtigung zur Verwendung der neuen Datenbank.
  5. Ein neuer Benutzer meldet sich bei einer neuen Datenbank an;

Datenbank erstellen

Voraussetzung für diesen Schritt ist, dass der Datenbankdienst gestartet wurde und der aktuelle Benutzer über die Berechtigung zum Erstellen der Datenbank verfügt. Im Allgemeinen verwenden wir zu Beginn den Superadministrator, um die erste benutzerdefinierte Datenbank zu erstellen.

Die neue Datenbank wird durch Kopieren der Vorlagendatenbank template1 erstellt. Mit anderen Worten: Beim Erstellen einer Datenbank wird tatsächlich eine Kopie der Vorlagenbibliothek template1 kopiert, die bei der Initialisierung des Clusters vordefiniert ist. In Postgresql verfügt jedes Datenbankobjekt über eine eindeutige Kennung
. OID genannt, und der neuen Datenbank wird auch eine OID zugewiesen;

Gängige Methoden zum Erstellen einer Datenbank:

  • Erstellen Sie im grafischen Client und erstellen Sie die Datenbank über das Menü;
  • Dieser Artikel wurde über Befehle oder SQL erstellt und teilt auch diese Methode, da sie einfach und direkt ist und sich bei Änderungen an der Benutzeroberfläche nicht ändert.

In diesem Artikel wird die Erstellung mithilfe von Befehlen und SQL vorgestellt. Die grafische Darstellung ist relativ einfach.

Vor der Erstellung müssen wir Anmeldeinformationen vorbereiten, da Sie sich unabhängig von der Erstellungsmethode beim Datenbanksystem anmelden können müssen und diese schließlich in die SQL-Ausführung konvertiert werden.
Durch die Freigabe im vorherigen Artikel gibt es im neu initialisierten Cluster standardmäßig eine Datenbank postgresund einen Superadministrator-Benutzer, der standardmäßig der Benutzer des aktuellen Systems ist senllang(ändern Sie ihn entsprechend Ihrer eigenen Situation) und die Überwachungs-IP localhost, Hafen 5432;

Mit diesen Informationen können wir mit der Erstellung einer neuen Datenbank beginnen;

SQLCreate

  • Melden Sie sich beim Datenbanksystem an
[senllang@hatch bin]$ ./psql -d postgres
psql (16beta1)
Type "help" for help.

postgres=#

Der Benutzername, die IP und der Port verwenden hier alle Standardwerte und es wird nur der Datenbankname angegeben.

  • Erstellen Sie die Datenbank.
    Geben Sie in der Befehlszeile den folgenden Befehl ein:
postgres=# CREATE DATABASE db_factory;
CREATE DATABASE

Ersetzen Sie im obigen Befehl db_factoryden Namen der Datenbank, die Sie erstellen möchten.

Sie können die Liste der Datenbanken über den Befehl \lanzeigen

postgres=# \l
                                                        List of databases
    Name    |  Owner   | Encoding | Locale Provider |   Collate   |    Ctype    | ICU Locale | ICU Rules |   Access privileges
------------+----------+----------+-----------------+-------------+-------------+------------+-----------+-----------------------
 db_factory | senllang | UTF8     | icu             | en_US.UTF-8 | en_US.UTF-8 | en-US      |           |
 postgres   | senllang | UTF8     | icu             | en_US.UTF-8 | en_US.UTF-8 | en-US      |           |
 template0  | senllang | UTF8     | icu             | en_US.UTF-8 | en_US.UTF-8 | en-US      |           | =c/senllang          +
            |          |          |                 |             |             |            |           | senllang=CTc/senllang
 template1  | senllang | UTF8     | icu             | en_US.UTF-8 | en_US.UTF-8 | en-US      |           | =c/senllang          +
            |          |          |                 |             |             |            |           | senllang=CTc/senllang
(4 rows)

Der Eigentümer der gerade erstellten Datenbank db_factoryist der Erstellerbenutzer. Standardmäßig verfügt der Eigentümer über alle Berechtigungen der Datenbank. In der Spalte „Zugriffsrechte“ sind keine Informationen enthalten.

Erstellung von Client-Befehlen

Im bin-Verzeichnis unter dem Installationsverzeichnis befindet sich ein Tool createdb. Anhand des Namens wissen wir, dass es sich um ein spezielles Tool zum Erstellen von Datenbanken handelt.
Schauen wir uns zunächst die Hilfeinformationen an.

[senllang@hatch bin]$ ./createdb --help
createdb creates a PostgreSQL database.

Usage:
  createdb [OPTION]... [DBNAME] [DESCRIPTION]

Options:
  -D, --tablespace=TABLESPACE  default tablespace for the database
  -e, --echo                   show the commands being sent to the server
  -E, --encoding=ENCODING      encoding for the database
  -l, --locale=LOCALE          locale settings for the database
      --lc-collate=LOCALE      LC_COLLATE setting for the database
      --lc-ctype=LOCALE        LC_CTYPE setting for the database
      --icu-locale=LOCALE      ICU locale setting for the database
      --icu-rules=RULES        ICU rules setting for the database
      --locale-provider={
    
    libc|icu}
                               locale provider for the database's default collation
  -O, --owner=OWNER            database user to own the new database
  -S, --strategy=STRATEGY      database creation strategy wal_log or file_copy
  -T, --template=TEMPLATE      template database to copy
  -V, --version                output version information, then exit
  -?, --help                   show this help, then exit

Connection options:
  -h, --host=HOSTNAME          database server host or socket directory
  -p, --port=PORT              database server port
  -U, --username=USERNAME      user name to connect as
  -w, --no-password            never prompt for password
  -W, --password               force password prompt
  --maintenance-db=DBNAME      alternate maintenance database

By default, a database with the same name as the current user is created.

Report bugs to <[email protected]>.
PostgreSQL home page: <https://www.postgresql.org/>

Sie können sehen, dass bei der Verwendung einfach direkt eine neue Datenbank erstellt wird, wenn es sich um die Standard-IP, den Standard-Port und den Standard-Benutzer handelt.
Wir erstellen eine weitere db_factory1Datenbank

[senllang@hatch bin]$ ./createdb db_factory1
postgres=# \l
                                                        List of databases
    Name     |  Owner   | Encoding | Locale Provider |   Collate   |    Ctype    | ICU Locale | ICU Rules |   Access privileges
-------------+----------+----------+-----------------+-------------+-------------+------------+-----------+-----------------------
 db_factory  | senllang | UTF8     | icu             | en_US.UTF-8 | en_US.UTF-8 | en-US      |           |
 db_factory1 | senllang | UTF8     | icu             | en_US.UTF-8 | en_US.UTF-8 | en-US      |           |
 postgres    | senllang | UTF8     | icu             | en_US.UTF-8 | en_US.UTF-8 | en-US      |           |
 template0   | senllang | UTF8     | icu             | en_US.UTF-8 | en_US.UTF-8 | en-US      |           | =c/senllang          +
             |          |          |                 |             |             |            |           | senllang=CTc/senllang
 template1   | senllang | UTF8     | icu             | en_US.UTF-8 | en_US.UTF-8 | en-US      |           | =c/senllang          +
             |          |          |                 |             |             |            |           | senllang=CTc/senllang
(5 rows)

Durch die Abfrage können Sie sehen, dass die Erstellung erfolgreich war und andere Informationen mit denen übereinstimmen, die mit der ersten Methode erstellt wurden.

Mit beiden oben genannten Methoden können Sie erfolgreich eine PostgreSQL-Datenbank erstellen. Sie können die für Sie geeignete Methode basierend auf Ihren persönlichen Vorlieben und Ihrer Nutzungsumgebung auswählen.

Lagerraum

Wo wird die Datenbank gespeichert? Im vorherigen Blog wurde die logische Architektur der Datenbank vorgestellt, einschließlich Speicherebenen und Namespaces. Standardmäßig wird sie im Standardtabellenbereich pg_default gespeichert und ihr Speicherort ist das Basisverzeichnis unter dem aktuellen Clusterverzeichnis; wenn angegeben Der Tabellenbereich befindet sich in dem Verzeichnis, das dem Tabellenbereich entspricht.

Lassen Sie uns bestätigen, dass die im Clusterverzeichnis gespeicherten Verzeichnisse und Dateien nach der OID benannt sind. Daher müssen wir die OID der aktuellen Datenbank überprüfen.

postgres=# select * from pg_tablespace ;
  oid  |   spcname    | spcowner | spcacl | spcoptions
-------+--------------+----------+--------+------------
  1663 | pg_default   |       10 |        |
  1664 | pg_global    |       10 |        |
 16394 | tblspc_test1 |       10 |        |
(3 rows)
postgres=# select oid, datname, dattablespace from pg_database ;
  oid  |   datname   | dattablespace
-------+-------------+---------------
     5 | postgres    |          1663
     1 | template1   |          1663
     4 | template0   |          1663
 16445 | db_factory  |          1663
 16446 | db_factory1 |          1663
(5 rows)

Die Organisationsform der Daten wird in den Systemtabellen aufgezeichnet, die auch als Datenwörterbücher bezeichnet werden können. Die Informationen, der Name und die entsprechende OID des Tabellenbereichs werden in aufgezeichnet.
Die Informationen, der Name und die entsprechende OID der Datenbank werden in und aufgezeichnet Speichern Sie die OID des entsprechenden Tabellenbereichs. Sie können die beiden von uns erstellten Factory-Datenbanken sehen. Die OIDs sind 16445 bzw. 16446, und der entsprechende Tabellenbereich ist 1663, also pg_default, der Speicherort des Standardtabellenbereichs.pg_tablespace
pg_database

Alle im System verwendeten Datenbankobjekte werden über OID identifiziert und referenziert. Oft müssen wir den entsprechenden Namen über OID finden;

Suchen Sie als Nächstes den Speicherort des Standardtabellenbereichs. Er befindet sich im Clusterverzeichnis testdemo1und entspricht dem Basisverzeichnis.

[senllang@hatch bin]$ cd testdemo1/base/
[senllang@hatch base]$ ls -l
total 60
drwx------. 2 senllang develops 8192 Sep  3 09:40 1
drwx------. 2 senllang develops 8192 Sep  7 08:27 16445
drwx------. 2 senllang develops 8192 Sep  7 08:32 16446
drwx------. 2 senllang develops 8192 Sep  2 22:02 4
drwx------. 2 senllang develops 8192 Sep  6 13:57 5
-- 集群目录的路径,根据自己的实际位置查找 
[senllang@hatch base]$ pwd
/opt/postgres/bin/testdemo1/base

Sie können sehen, dass es im Basisverzeichnis fünf Ordner gibt, die alle mit Nummern benannt sind, die den OIDs in der Datenbankliste entsprechen. Auch die beiden neu erstellten Datenbanken 16445 und 16446 sind hier, und darunter befinden sich bereits viele Dateien. Kopiert aus der Vorlagendatenbank;

Eigentümer

Der standardmäßige Eigentümerbenutzer ist der Ersteller, der ebenfalls beim Erstellen angegeben oder natürlich nach der Erstellung geändert werden kann.

Der Eigentümer spielt eine sehr wichtige Rolle bei der Berechtigungsverwaltung und entspricht dem Manager des Datenbankobjekts.

In PostgreSQL hat der Besitzer eines Datenbankobjekts die folgenden Rollen:

  1. Berechtigungskontrolle: Der Eigentümer eines Datenbankobjekts hat die volle Kontrolle über das Objekt. Sie können alle mit dem Objekt verbundenen Vorgänge ausführen, einschließlich Lesen, Ändern, Löschen usw. Andere Benutzer benötigen vom Eigentümer erteilte Berechtigungen, um mit dem Objekt arbeiten zu können.
  2. Objektzugriff: Der Eigentümer eines Datenbankobjekts kann entscheiden, welche Benutzer auf das Objekt zugreifen können. Durch die Gewährung verschiedener Berechtigungsstufen kann der Eigentümer die Vorgänge des Benutzers steuern, z. B. das Lesen, Ändern und Löschen von Objekten.
  3. Eigentum an Objekten: Der Eigentümer eines Datenbankobjekts ist der Eigentümer des Objekts und kann jede Operation am Objekt ausführen. Das Eigentum kann auf andere Benutzer übertragen werden, aber nur der Eigentümer kann das Eigentum zurückfordern.
  4. Objektabhängigkeiten: Einige Datenbankobjekte (z. B. Ansichten, Trigger usw.) hängen von anderen Objekten ab. Wenn diese abhängigen Objekte gelöscht oder geändert werden, kann der Eigentümer entscheiden, ob der Lösch- oder Änderungsvorgang zulässig ist.

Zugriffsberechtigung

Bei normaler Nutzung des Datenbanksystems wird der Superadministrator-Benutzer im Allgemeinen nicht verwendet. Superadministratoren werden nur in besonderen Szenarien verwendet.
Wir erstellen einen neuen Benutzer , managerder Eigentümer der Datenbank wird db_factoryund die volle Verantwortung für die Zuweisung von Berechtigungen an andere Benutzer trägt.
Erstellen Sie einen hrneuen Benutzer, der die Datenbank verwenden kann, z. B. Tabellen erstellen usw., die Datenbank jedoch nicht ändern kann.

Erstellen Sie einen normalen Benutzer

Erstellen Sie zwei neue normale Benutzer und geben Sie als Passwort 123456 an;

postgres=# create user manager with password '123456';
CREATE ROLE
postgres=# create user hr with password '123456';
CREATE ROLE

Hier gibt es ein Detail. Die endgültige Ausgabe ist CREATE ROLE, wodurch eindeutig ein Benutzer zum Erstellen erstellt wird. Ich werde dies im Kapitel über Benutzerberechtigungen mit Ihnen teilen;

Besitzer ändern

Die Zuständigkeiten des Superadministrators sollten der Datenbank des Benutzers zugewiesen werden und der jeweilige Administrator sollte dafür verantwortlich sein, daher werden hier die Rechte zur Datenbankverwaltung an den Benutzer db_factoryvergeben .manager

Natürlich ist dieser Befehl sehr gefährlich. Es ist am besten, den Eigentümer gleich zu Beginn beim Erstellen zuzuweisen.

postgres=# alter database db_factory owner to manager ;
ALTER DATABASE
db_factory=> \l
                                                        List of databases
    Name     |  Owner   | Encoding | Locale Provider |   Collate   |    Ctype    | ICU Locale | ICU Rules |   Access privileges
-------------+----------+----------+-----------------+-------------+-------------+------------+-----------+-----------------------
 db_factory  | manager  | UTF8     | icu             | en_US.UTF-8 | en_US.UTF-8 | en-US      |           | =Tc/manager          +
             |          |          |                 |             |             |            |           | manager=CTc/manager  +
             |          |          |                 |             |             |            |           | hr=CTc/manager
 db_factory1 | senllang | UTF8     | icu             | en_US.UTF-8 | en_US.UTF-8 | en-US      |           |
 postgres    | senllang | UTF8     | icu             | en_US.UTF-8 | en_US.UTF-8 | en-US      |           |
 template0   | senllang | UTF8     | icu             | en_US.UTF-8 | en_US.UTF-8 | en-US      |           | =c/senllang          +
             |          |          |                 |             |             |            |           | senllang=CTc/senllang
 template1   | senllang | UTF8     | icu             | en_US.UTF-8 | en_US.UTF-8 | en-US      |           | =c/senllang          +
             |          |          |                 |             |             |            |           | senllang=CTc/senllang
(5 rows)

Nach der Überprüfung db_factoryhat sich der Eigentümer tatsächlich in managereinen Benutzer geändert, und im Feld „Zugriffsberechtigungen“ sind auch Berechtigungsinformationen vorhanden.

Jemand möchte fragen: Warum ist das so problematisch? Dieses Datenbanksystem wird beispielsweise von drei Unternehmen verwendet und entspricht drei Datenbanken. Wenn sie alle von Superadministratorbenutzern verwaltet werden, gibt es jeden Tag Streit darüber: „Wer hat meine Datenbank wieder berührt?“ Haha ~

Zugriff gewähren

Melden Sie sich als normaler Benutzer managerbei der Datenbank an db_factory. Sie können sich abmelden und erneut anmelden oder \qmithilfe der zuvor freigegebenen Methode zwischen \cDatenbanken und Benutzern wechseln .

Erteilen Sie hrdem Benutzer die Berechtigung zum Erstellen in der aktuellen Datenbank.

postgres=# \c db_factory manager
You are now connected to database "db_factory" as user "manager".

db_factory=> grant ALL ON database db_factory TO hr ;
GRANT

Melden Sie sich als normaler Benutzer hrbei der Datenbank an db_factory; versuchen Sie, eine Tabelle zu erstellen

db_factory=> \c db_factory hr
You are now connected to database "db_factory" as user "hr".

db_factory=> CREATE TABLE employees (
db_factory(>   employee_id SERIAL PRIMARY KEY,
db_factory(>   name VARCHAR(100),
db_factory(>   department VARCHAR(100),
db_factory(>   position VARCHAR(100),
db_factory(>   hire_date DATE,
db_factory(>   salary NUMERIC(10, 2)
db_factory(> );
ERROR:  permission denied for schema public
LINE 1: CREATE TABLE employees (

Es ist tatsächlich fehlgeschlagen, aber aus der Fehlermeldung geht hervor, dass keine Berechtigung für das Standardschema, also öffentlich, vorhanden ist. Durch die vorherige Einführung des Namespace wissen wir, dass sich unter der Datenbank ein Schema befindet Die Tabelle muss in einem bestimmten Schema vorliegen.

Die Berechtigung zum Erstellen unter der Datenbank wurde bereits früher erteilt, es gibt jedoch keine Berechtigung für das Schema;
die Berechtigung zum Erstellen unter dem Schema wird unten erteilt;

postgres=# \c db_factory manager
You are now connected to database "db_factory" as user "manager".

db_factory=> grant create on schema public  TO hr;
GRANT

Tabelle in neuer Datenbank erstellen

Melden Sie sich als normaler Benutzer hrbei der Datenbank an db_factory;

db_factory=> \c db_factory hr
You are now connected to database "db_factory" as user "hr".
db_factory=> CREATE TABLE employees (
  employee_id SERIAL PRIMARY KEY,
  name VARCHAR(100),
  department VARCHAR(100),
  position VARCHAR(100),
  hire_date DATE,
  salary NUMERIC(10, 2)
);
CREATE TABLE
db_factory=> \d
                   List of relations
 Schema |           Name            |   Type   | Owner
--------+---------------------------+----------+-------
 public | employees                 | table    | hr
 public | employees_employee_id_seq | sequence | hr
(2 rows)

Wenn die Mitarbeitertabelle erfolgreich erstellt wurde, ist ihr Eigentümer der Ersteller HR, sodass der HR-Benutzer alle Berechtigungen für die Tabelle hat. Dies ist eine hierarchische Verwaltungsstrategie, die der realen hierarchischen Beziehung der Personalverwaltung entspricht.

Ende

Vielen Dank für Ihre Unterstützung. Vergessen Sie nicht, beim Stöbern Ihre wertvollen Kommentare zu hinterlassen. Wenn Sie der Meinung sind, dass es eine Ermutigung wert ist, liken Sie es bitte und speichern Sie es. Ich werde härter arbeiten!

E-Mail des Autors: [email protected]
Wenn es Fehler oder Auslassungen gibt, weisen Sie bitte darauf hin und lernen Sie voneinander.

Hinweis: Nachdruck nicht ohne Zustimmung!

Guess you like

Origin blog.csdn.net/senllang/article/details/132776417