sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan bevarer man data ved hjælp af postgres docker-billede?

For det første ser disse miljøvariabler mistænkelige ud. Tag et kig på dokumentationen til det officielle Docker-billede , og bemærk, at du har brug for POSTGRES_DB , POSTGRES_USER og POSTGRES_PASSWORD , i stedet for DB_NAME , DB_USER og DB_PASS .

Bortset fra det, ser det ud til, at du for det meste er på rette vej. Her er et komplet eksempel:

Først starter jeg en Postgres container. Jeg er ved at finde den vedvarende lagring et sted uden for min hjemmemappe, fordi som du allerede har bemærket, vil filer ikke ejes af dig, hvilket kan være forvirrende i din hjemmemappe (dog ikke nødvendigvis problematisk):

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

Da det er første gang, jeg har startet postgres med at pege på det databibliotek, vil vi se det initialisere databasen:

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:

Nu, fra et andet vindue, kan jeg oprette forbindelse til det...

$ 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.

...og opret nogle data:

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)

Nu forlader jeg beholderen:

^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

Vi kan bekræfte, at den ikke længere kører:

$ docker ps | grep postgres

Men hvis vi starter det op igen med de samme kommandolinjeargumenter;

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

Vi ser, at den ikke initialiserer databasen, da den allerede eksisterer, og springer direkte til:

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

På dette tidspunkt kan vi genoprette forbindelse til databasen og finde ud af, at vores data stadig eksisterer:

$ 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)

Det er stort set alt, hvad der skal til.




  1. Opret Java på Oracle-database med JDBC

  2. Android SQlite opdaterer ikke dataene

  3. PL/SQL-program til at udskrive medarbejderoplysninger

  4. Kan jeg deaktivere en trigger inde i en trigger i Oracle?