PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да запазя данни с помощта на postgres docker изображение?

Първо, тези променливи на средата изглеждат подозрителни. Разгледайте документацията за официалното изображение на Docker и имайте предвид, че имате нужда от POSTGRES_DB , POSTGRES_USER и POSTGRES_PASSWORD , а не DB_NAME , DB_USER и DB_PASS .

Освен това, изглежда, че сте на прав път. Ето пълен пример:

Първо, стартирам контейнер на Postgres. Намирам постоянното хранилище някъде извън моята домашна директория, защото както вече отбелязахте, файловете няма да бъдат ваша собственост, което може да бъде объркващо във вашата домашна директория (макар и не непременно проблематично):

docker run --rm --name postgres \
  -v /tmp/postgres:/var/lib/postgresql/data \
  -e POSTGRES_DB=larstest \
  -e POSTGRES_USER=lars \
  -e POSTGRES_PASSWORD=secret postgres

Тъй като това е първият път, когато стартирам postgres, сочещ към тази директория с данни, ще видим, че инициализира базата данни:

The database cluster will be initialized with locale "en_US.utf8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".

Data page checksums are disabled.

fixing permissions on existing directory /var/lib/postgresql/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting dynamic shared memory implementation ... posix
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok

Success. You can now start the database server using:

Сега, от друг прозорец, мога да се свържа с него...

$ psql -h 172.17.0.4 -U lars larstest
Password for user lars: 
psql (9.5.4, server 9.6.0)
WARNING: psql major version 9.5, server major version 9.6.
         Some psql features might not work.
Type "help" for help.

...и създайте някои данни:

larstest=# create table testtable (id integer);
CREATE TABLE
larstest=# insert into testtable values (1);
INSERT 0 1
larstest=# select * from testtable;
 id 
----
  1
(1 row)

Сега излизам от контейнера:

^CLOG:  received fast shutdown request
LOG:  aborting any active transactions
FATAL:  terminating connection due to administrator command
LOG:  autovacuum launcher shutting down
LOG:  shutting down
LOG:  database system is shut down

Можем да проверим, че вече не работи:

$ docker ps | grep postgres

Но ако го стартираме отново със същите аргументи на командния ред;

docker run --rm --name postgres \
  -v /tmp/postgres:/var/lib/postgresql/data \
  -e POSTGRES_DB=larstest \
  -e POSTGRES_USER=lars \
  -e POSTGRES_PASSWORD=secret postgres

Виждаме, че не инициализира базата данни, тъй като тя вече съществува, и прескачаме направо към:

LOG:  database system was shut down at 2016-10-21 03:13:50 UTC
LOG:  MultiXact member wraparound protections are now enabled
LOG:  database system is ready to accept connections
LOG:  autovacuum launcher started

В този момент можем да се свържем отново с базата данни и да открием, че нашите данни все още съществуват:

$ psql -h 172.17.0.2 -U lars larstest
Password for user lars: 
psql (9.5.4, server 9.6.0)
WARNING: psql major version 9.5, server major version 9.6.
         Some psql features might not work.
Type "help" for help.

larstest=# select * from testtable;
 id 
----
  1
(1 row)

Това е почти всичко.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. в redshift postgresql мога ли да пропускам колони с функцията за копиране

  2. Върнат тип за функция с array_agg()

  3. JPA връзка много към много, причиняваща безкрайна рекурсия и грешка при препълване на стека

  4. Вземете деня от дата в PostgreSQL

  5. Как да сумирате условно две колони в PostgreSQL 9.3