我正在嘗試創建一個 init.sql 檔案來自動創建用戶、資料庫、架構和表。目前,用戶和資料庫已創建,但我的架構和表有問題。請參閱下面的我的代碼:
碼頭工人組成:
postgres_db:
image: postgres:14.1
restart: unless-stopped
environment:
POSTGRES_USER: ${SERVER_DB_USER}
POSTGRES_PASSWORD: ${SERVER_DB_PASS}
volumes:
- ./data/postgres:/var/lib/postgresql/data
- ./admin/config:/docker-entrypoint-initdb.d
ports:
- "5432:5432"
networks:
- bypass
/admin/config 中的 init.sql 檔案:
CREATE USER bypass;
CREATE DATABASE bypass;
GRANT ALL PRIVILEGES ON DATABASE bypass TO bypass;
\c bypass;
CREATE SCHEMA bypass_project;
CREATE TABLE bypass_project.Bypass_Data (
id serial PRIMARY KEY,
Date_Time TIMESTAMP,
Module VARCHAR(25),
Area VARCHAR(25),
);
運行 docker-compose up 后,我看不到架構和表。我很確定\c bypass使用不正確。如何連接到旁路資料庫并在那里創建所有內容?
uj5u.com熱心網友回復:
您在CREATE TABLE陳述句中的 SQL 語法肯定有錯誤。您應該洗掉尾隨逗號:
CREATE TABLE bypass_project.Bypass_Data (
id serial PRIMARY KEY,
Date_Time TIMESTAMP,
Module VARCHAR(25),
Area VARCHAR(25)
);
您也可以嘗試(第二個bypass是您的資料庫用戶):
\c bypass bypass;
代替
\c bypass;
也是\c一個特定于 psql 的命令。如果您嘗試在另一個客戶端中執行包含此類命令的 SQL 腳本,它將不起作用。
在這種情況下,您可以嘗試使用init.sh腳本而不是bash 腳本中的init.sql和 使用psql。您可以在此處查看完整示例。
如果它對您沒有幫助,您能否提供更多資訊?我認為 docker-compose log 會有所幫助。
uj5u.com熱心網友回復:
你應該把這個留在你的init.sql:
CREATE USER bypass;
CREATE DATABASE bypass;
GRANT ALL PRIVILEGES ON DATABASE bypass TO bypass;
然后您應該公開 DB 埠并從您的應用程式容器連接到它。如果您使用 Python,正如您在評論中提到的,您應該使用一些資料庫遷移機制,如 Django ORM 或 SQLAlchemy。在部署 python 應用程式遷移機制時應該呼叫,它會實作你的資料庫的狀態。
這是 Django PostgreSQL 設定的配置示例,這是有關 Django 遷移的指南。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/391463.html
標籤:PostgreSQL的 码头工人 目录 在里面
