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

Docker compose postgresql услуга - не може да създаде потребител и база данни по време на изграждане?

Обемите не са налични по време на изграждане. Можете да създадете /var/lib/postgresql/data във вашия скрипт, но ще бъде презаписан от VOLUME /var/lib/postgresql/data от postgres:9.6 изображение.

Във вашия случай:просто използвайте следния докер файл:

FROM postgres:9.6
COPY ./create_fixtures.sql /docker-entrypoint-initdb.d/create_fixtures.sql

Те се изпълняват автоматично, след като контейнерът стартира. Ето един пример:

$ docker run -d --name mydb -p 33306:3306 yourtag
$ docker exec -ti mydb psql -U postgres
postgres=# \l
                                 List of databases
    Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges   
------------+----------+----------+------------+------------+-----------------------
 mydatabase | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =Tc/postgres         +
            |          |          |            |            | postgres=CTc/postgres+
            |          |          |            |            | webuser=CTc/postgres
 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
(4 rows)

Остарял отговор:

Вашият скрипт трябва да работи на контейнер с изключение на приспособлението, което трябва да изпълните psql по този начин:

su postgres -c "psql -f create_fixtures.sql"

su --login postgres не работи, защото postgres не може да отвори bash или shell. Можете да опитате с docker run --rm -ti postgres:9.6 bash .

Съжалявам, трябва да ви кажа, че има още една грешка във вашия sql скрипт:GRANT ALL PRIVILEGES ON DATABASE mydatabase TO webuser - ключовата дума DATABASE е необходимо тук.

Ето пълен дневник как тествах и мога да потвърдя, че работи:

docker run --rm -ti postgres:9.6 bash
[email protected]:/# cat > test.sql <<EOF
> CREATE DATABASE mydatabase WITH ENCODING 'UTF8';
> CREATE USER webuser ENCRYPTED PASSWORD 'asdf123' NOSUPERUSER NOCREATEDB NOCREATEROLE;
> GRANT ALL PRIVILEGES ON DATABASE mydatabase TO webuser;
> EOF
[email protected]:/# pg_createcluster 9.6 main --start
Creating new PostgreSQL cluster 9.6/main ...                                                                                                  
/usr/lib/postgresql/9.6/bin/initdb -D /var/lib/postgresql/9.6/main --auth-local peer --auth-host md5                                          
The files belonging to this database system will be owned by user "postgres".                                                                 
This user must also own the server process.                                                                                                   

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/9.6/main ... 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:                                                                                         

    /usr/lib/postgresql/9.6/bin/pg_ctl -D /var/lib/postgresql/9.6/main -l logfile start                                                       

Ver Cluster Port Status Owner    Data directory               Log file                                                                        
9.6 main    5432 online postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log                                     
[email protected]:/# /etc/init.d/postgresql start
[ ok ] Starting PostgreSQL 9.6 database server: main.                                                                                         
[email protected]:/# su postgres -c "psql -f test.sql"
CREATE DATABASE                                                                                                                               
CREATE ROLE
GRANT
[email protected]:/# /etc/init.d/postgresql stop
[ ok ] Stopping PostgreSQL 9.6 database server: main.
[email protected]:/# exit
exit


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Съставен индекс с три ключа, какво се случва, ако прескоча средния в заявката?

  2. plpgsql функцията, която връща множество колони, се извиква многократно

  3. Транспониране на sql резултат, така че една колона да отива в няколко колони

  4. Извикване на недефинирана функция pg_connect() - Wamp

  5. PostgreSQL - Колона с псевдоними и HAVING