sql >> データベース >  >> RDS >> PostgreSQL

Dockerはpostgresqlサービスを構成します-ビルド中にユーザーとデータベースを作成できませんか?

    ボリュームはビルド時に使用できません。 /var/lib/postgresql/dataを作成できます スクリプト内ですが、VOLUME /var/lib/postgresql/dataによって上書きされます postgres:9.6から 画像。

    あなたの場合:次のDockerファイルを使用してください:

    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またはシェルを開くことができないため、機能しません。 docker run --rm -ti postgres:9.6 bashで試してみることができます 。

    申し訳ありませんが、SQLスクリプトにもう1つのエラーがあります: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. mySQLクエリはJavaで構文エラーを出しますが、mySQLワークベンチでは正常に機能します

    2. MySQLワークベンチ5.2.40でテーブルを作成できません

    3. 実際のテーブルから行を削除する前に、関連するテーブルから行を削除するトリガー

    4. 名前が「hibernate5AnnotatedSessionFactory」のBeanのクラス[org.springframework.orm.hibernate5.LocalSessionFactoryBean]が見つかりません