Есть два способа установить PostgreSQL в вашей системе.
- Установите PostgreSQL прямо в вашу систему (в зависимости от того, какая у вас ОС).
- Сначала установите Docker, а затем установите PostgreSQL поверх Docker. (Мы используем этот подход, потому что установка докера зависит от ОС, но поверх докера, когда мы устанавливаем любой образ — например, PostgreSQL здесь — тогда он не зависит от ОС, что означает, что этап установки PostgreSQL поверх докера и его использование останутся независимыми от ОПЕРАЦИОННЫЕ СИСТЕМЫ)
Шаги
Установите Docker в вашей системе.
Обратитесь к официальному сайту в зависимости от вашей ОС.
Установите образ PostgreSQL поверх докера
$ docker run --name my-own-postgres -e POSTGRES_PASSWORD=my_password -p 5432:5432 -d postgres
- Флаг
--name
назначает конкретное имя контейнеру, который мы запустили. - Флаг
-e
устанавливает переменную среды внутри контейнера POSTGRES_PASSWORD. Эта переменная используется образом PostgreSQL для назначения корневого пароля Postgres. - Флаг
-d
запустит контейнер в фоновом режиме в «отключенном» режиме. Это означает, что ваш терминал освобождается для следующих команд и не будет отображать запущенные скрипты для запуска PostgreSQL. - Флаг
-p
указывает на соответствие между портом хоста и портом контейнера соответственно. Первый5432
относится к хосту, а следующий5432
— к контейнеру. Все запросы, отправленные на порт 5432 на локальном хосте, будут перенаправлены на тот же порт внутри контейнера (где будет прослушиваться PostgreSQL). - Вы увидите что-то подобное по команде
docker ps
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ef2331c777c1 postgres "docker-entrypoint.s…" 3 seconds ago Up 2 seconds 0.0.0.0:5432->5432/tcp, :::5432->5432/tcp my-own-postgres
- Чтобы убедиться, что установка PostgreSQL установлена правильно, перейдите внутрь контейнера и проверьте пользователя
postgres
(пользователь по умолчанию, созданный при установке). - Переместить внутрь контейнера
$ docker exec -it my-own-postgres bash root@ef2331c777c1:/#
- Войдите в командную строку
psql
разными способами, с паролем и без него (\q
для выхода из оболочки иexit
для выхода из контейнера)
---------------------Without hostname and password------------------root@ef2331c777c1:/# psql -U postgres psql (14.4 (Debian 14.4-1.pgdg110+1)) Type "help" for help. postgres=# \q ----------------------------With Hostname--------------------------- root@ef2331c777c1:/# psql -U postgres -h localhost psql (14.4 (Debian 14.4-1.pgdg110+1)) Type "help" for help. postgres=# \q ---------------------------With Password---------------------------- root@ef2331c777c1:/# psql -U postgres -h localhost -W Password: psql (14.4 (Debian 14.4-1.pgdg110+1)) Type "help" for help. postgres=# ----------------------------List Databases-------------------------- postgres=# \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+------------+------------+----------------------- postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 | template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres + | | | | | postgres=CTc/postgres (3 rows) postgres=#
Установите PgAdmin (для простого доступа к PostgreSQL — необязательно)
- Настройте PgAdmin, используя Docker-образ PgAdmin. Обратите внимание, что здесь порт машины —
5050
, поэтому, когда мы получим доступ к консоли PgAdmin в браузере, нам нужно посетить URL-адрес, например http://localhost:5050/login. Также запомните логин и пароль, которые будут использоваться для входа. в пгадмин.
$ docker run --name pgadmin -e "[email protected]" -e "PGADMIN_DEFAULT_PASSWORD=admin" -p 5050:80 -d dpage/pgadmin4
- Чтобы подключиться к базе данных PostgreSQL, убедитесь, что предыдущий контейнер PostgreSQL запущен, и получите его IP-адрес как
$ docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq) /pgadmin - 172.17.0.3 /my-own-postgres - 172.17.0.2
- Поместите IP-адрес PostgresSQL (
172.17.0.2
) в настройку подключения PgAdmin. Нажмите Сервер › Зарегистрировать › Сервер и введите данные ниже.
Имя хоста: IP-адрес контейнера PostgreSQL.
Порт: пост-машина PostgresSQL (не порт контейнера).
Имя БД: по умолчанию postgres
БД создается при запуске.
Имя пользователя: имя пользователя, которое мы выбираем при запуске контейнера PostgresSQL (не PgAdmin).
Пароль: пароль базы данных PostgreSQL.
После подключения вы можете увидеть что-то вроде этого.
Мы также можем установить PgAdmin на локальный компьютер и подключить его к Docker PostgreSQL, но тогда имя хоста PgAdmin может быть localhost
.
Ждать! Есть кое-что еще. Что, если мне нужна такая же оболочка PSQL здесь, в PgAdmin?
Этот способ установки PgAdmin отлично подходит для всех операций, за исключением одного случая, когда мы хотим получить доступ к оболочке PSQL в PgAdmin, подобно этому.
Я пытался, но не смог получить это в PgAdmin докера. Но мы можем легко получить это в PgAdmin4, который мы устанавливаем непосредственно в ОС. Но есть одна загвоздка. Эта прямая установка будет ссылаться на двоичные файлы, такие как psql
и psql_dump
, которые поставляются с установкой Postgres напрямую поверх ОС. Я думаю, что это причина, по которой PgAdmin, работающий в экземпляре докера, не может показать опцию оболочки PSQL, потому что один процесс контейнера (контейнер PgAdmin) не может ссылаться на двоичные файлы Postgres, присутствующие в другом контейнере (контейнере Postgres).
Для этого потребуется установка Postgres и PgAdmin поверх ОС, и как только мы сможем получить доступ к PgAdmin, мы установим соединение с обеими базами данных (ОС Postgres и Docker Postgres).
- Установите Postgres в ОС Linux (Ubuntu) как (первая команда занимает две строки, но это одна)
$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' $ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - $ sudo apt-get update $ sudo apt-get -y install postgresql
- Войдите в оболочку PSQL, как показано ниже.
$ sudo -u postgres psql [sudo] password for ubuntu_user: psql (14.0 (Ubuntu 14.0-1.pgdg21.04+1)) Type "help" for help. postgres=#
- После установки Postgres в ОС Linux определите его двоичное расположение и сохраните его в безопасности, поскольку нам нужно указать путь к этой двоичной папке в PgAdmin, чтобы получить доступ к той же оболочке PSQL.
$ which psql /usr/bin/psql
- Кроме того, убедитесь, что процесс запущен и запущен. (В случае, если Docker Postgres работает на порту
5432
, ОС Postgres автоматически выберет порт5433
)
$ sudo systemctl status postgresql.service ● postgresql.service - PostgreSQL RDBMS Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled) Active: active (exited) since Sun 2022-09-04 16:22:28 IST; 4h 6min ago Main PID: 10856 (code=exited, status=0/SUCCESS) CPU: 3ms
- Если нет, то начните использовать приведенную ниже команду
$ sudo systemctl start postgresql.service
- Установите PgAdmin сейчас
# Install the public key for the repository (if not done previously): $ sudo curl https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo apt-key add # Create the repository configuration file: $ sudo sh -c 'echo "deb https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/$(lsb_release -cs) pgadmin4 main" > /etc/apt/sources.list.d/pgadmin4.list && apt update' # Install for both desktop and web modes: $ sudo apt install pgadmin4
- Откройте PgAdmin4 в ОС и перейдите в это место: Файл › Предпочтения › Пути › Двоичные пути и укажите указанный ниже путь для двоичного расположения.
- Теперь подключите ваш PgAdmin как к Postgres в докере, так и к тому, что находится в ОС.
- Теперь мы можем получить доступ к оболочке PSQL, выбрав любую из баз данных, щелкнув правой кнопкой мыши и выбрав
PSQL Tool
.