在WSL2上使用Docker搭建Postgres玩耍环境

目标

    • 自分用備忘録

 

    とりあえず docker で postgresql 動かしたい人

环境

    • OS: windows11 の WSL2 ubuntu

 

    editor: VSCode

本編 – 本文

wsl,docker 编辑

我参考了以下的文章来在wsl2上搭建Docker环境。

    • Windows11 で Docker Desktop を使わずに Docker

 

    【プロキシ対応】Docker Desktop for Windows を使わず、WSL2 / Ubuntu に apt で Docker を入れる

Docker Desktop在个人使用时是免费的,但在工作场合需要付费,因此可以考虑使用这种通用的方式进行创建。

安装VSCode的远程开发插件后,可以方便地通过VSCode终端来访问WSL2的Ubuntu。

PostgreSQL 编程

创建一个用于PostgreSQL的目录。

目录结构如下:

└── postgresdata
    ├── compose.yml
    └── init
    │   └── init.sql
    └── data
    │   └── ...
    └── work
        └── persondata.sql

我正在使用compose.yml中创建的目录进行绑定。
该目录的角色是

    • init: 最初に実行される init.sql 置き場

 

    • data: postgresql のデータ場所

 

    work: 作業ファイル置き場

是的。

compose.yml的内容如下。

version: "3.8"

services:
  db:
    image: postgres:14
    container_name: postgres
    environment:
      - POSTGRES_DB=test
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=xxxx
    ports:
      - "5432:5432"
    volumes:
      - ./init:/docker-entrypoint-initdb.d
      - ./data:/var/lib/postgresql/data
      - ./work:/work
    working_dir: /work

在环境变量的POSTGRES_DB中可以指定数据库。

我指定了工作目录,并简化了在执行 psql 时的文件路径指定。

以下是预先准备的 sql 文件。

    init.sql
CREATE TABLE person (name varchar(50), birthday date);
    persondata.sql
INSERT INTO
    person (name, birthday)
VALUES
    ('渋沢栄一', '1840-03-16'),
    ('徳川慶喜', '1837-10-28'),
    ('西郷隆盛', '1828-01-23'),
    ('坂本龍馬', '1836-01-03');

在准备好上述文件后,您可以使用docker compose up -d命令启动容器,并使用docker compose exec db psql -U user test命令启动psql。

进入 docker compose exec db /bin/bash 后,使用 psql -U user test 也可以。

轻松验证命令

    テーブル一覧、構造の確認

test=# \dt
        List of relations
 Schema |  Name  | Type  | Owner
--------+--------+-------+-------
 public | person | table | user
(1 row)

test=# \d person;
                       Table "public.person"
  Column  |         Type          | Collation | Nullable | Default
----------+-----------------------+-----------+----------+---------
 name     | character varying(50) |           |          |
 birthday | date                  |           |          |
    データ投入、確認
test=# \i personaldata.sql
INSERT 0 4

test=# select * from person;
   name   |  birthday
----------+------------
 渋沢栄一 | 1840-03-16
 徳川慶喜 | 1837-10-28
 西郷隆盛 | 1828-01-23
 坂本龍馬 | 1836-01-03
(4 rows)

最后

只要想要使用SQL的话,也可以使用类似SQL Fiddle这样的服务。

〇是一个很好的PostgreSQL复习环境。