PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Docker soạn dịch vụ postgresql - không thể tạo người dùng và cơ sở dữ liệu trong quá trình xây dựng?

Số lượng không có sẵn tại thời điểm xây dựng. Bạn có thể tạo /var/lib/postgresql/data trong tập lệnh của bạn nhưng nó sẽ bị ghi đè bởi VOLUME /var/lib/postgresql/data từ postgres:9.6 hình ảnh.

Trong trường hợp của bạn:chỉ cần sử dụng tệp docker sau:

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

Chúng được tự động thực thi khi vùng chứa bắt đầu. Đây là một ví dụ:

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

Câu trả lời lỗi thời:

Tập lệnh của bạn sẽ hoạt động trên một vùng chứa ngoại trừ trong phần cố định, bạn phải thực thi psql như thế này:

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

su --login postgres không hoạt động vì postgres không thể mở bash hoặc shell. Bạn có thể thử với docker run --rm -ti postgres:9.6 bash .

Xin lỗi, tôi phải thông báo với bạn rằng có một lỗi nữa trong tập lệnh sql của bạn:GRANT ALL PRIVILEGES ON DATABASE mydatabase TO webuser - từ khóa DATABASE là cần thiết ở đây.

Đây là nhật ký đầy đủ về cách tôi đã kiểm tra và có thể xác nhận điều này hoạt động:

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. Postgres tìm tệp cấu hình trong linux

  2. Sử dụng mã hóa để tăng cường bảo mật cơ sở dữ liệu PostgreSQL

  3. PostgreSQL - Hàm với các biến cục bộ - Tham chiếu cột không rõ ràng

  4. Tại sao Postgres thực hiện quét tuần tự trong đó chỉ mục sẽ trả về <1% dữ liệu?

  5. Trừ số năm cho một ngày trong PostgreSQL