sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur behåller man data med postgres docker-bild?

För det första ser dessa miljövariabler misstänkta ut. Ta en titt på dokumentationen för den officiella Docker-bilden , och notera att du behöver POSTGRES_DB , POSTGRES_USER och POSTGRES_PASSWORD , istället för DB_NAME , DB_USER och DB_PASS .

I övrigt verkar du för det mesta vara på rätt spår. Här är ett komplett exempel:

Först startar jag en Postgres-container. Jag hittar den beständiga lagringen någonstans utanför min hemkatalog, eftersom som du redan har noterat att filer inte kommer att ägas av dig, vilket kan vara förvirrande i din hemkatalog (även om det inte nödvändigtvis är problematiskt):

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

Eftersom det här är första gången jag har börjat postgres peka på den datakatalogen kommer vi att se den initialisera 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, från ett annat fönster, kan jag ansluta till 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.

...och skapa lite 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 lämnar jag behållaren:

^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 verifiera att den inte längre körs:

$ docker ps | grep postgres

Men om vi startar upp det igen med samma kommandoradsargument;

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 att den inte initierar databasen, eftersom den redan finns, och hoppar direkt till:

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

Vid det här laget kan vi återansluta till databasen och se att vår data fortfarande finns:

$ 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 är i stort sett allt som finns.




  1. Hur DENSE_RANK() fungerar i SQL Server

  2. ALTER TABLE för att lägga till en sammansatt primärnyckel

  3. Skapa en kml-fil från en mysql-databas med php

  4. Använder IF EXISTS med en CTE