1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PostgreSQLをローカル環境で使えるようにしてみた備忘録

1
Last updated at Posted at 2026-11-07

経緯

 こんにちは、よわよわのWeb開発エンジニアです😁

 今回、個人用にアプリケーション開発を行うために初めてPostgreSQLの環境構築をしてみて、割と手こずってしまったため、それを備忘録としてまとめておきます。

 私のDBに関する経験値としては、Microsoft SQL ServerとAzure CosmosDBを実務で、MySQLを個人で少し触ったことがあるくらいで、RDBに関する知識やコマンド知識は薄めです。

 なので、私のようなDB初心者向けに書ければと思います。

環境構築

1. 利用機能を整理する

 そんなことわかってるよ!と思われるかもしれませんが…

PostgreSQLって単体で使いたい場合はWindowsに直接インストールでいいんですが、拡張機能を使う場合この方法はバージョン管理などの観点からあまりよろしくないようで。

ベクトル検索は拡張機能になるので、将来的に拡張機能を使いたい人はDockerまたはWSL2(Ubuntu)で構築するようにしましょう。

(私はこのあたりをちゃんと調べずWindowsに直接インストールしてしまい、あとからDockerに作り直すという二度手間をやらかしました💦)

 ちなみに、筆者はDockerで構築したので、以下はDockerでの環境構築方法です。

2. compose.ymlの作成

 今回はベクトル検索の拡張機能を使いたかったため、その拡張機能が入ったイメージを使ってDockerを立ち上げます。

もし必要ない人は、docker-compose.ymlファイルのimage部分を書き換えておいてください。

ではまず、pgvectorのイメージを使って立ち上がるコンテナを作ります。

任意のフォルダの中に以下のdocker-compose.ymlファイルを作りましょう。

githubに上げる場合はユーザー名やパスワードを上げられないので、別途.envファイルを作成して任意のDB_USER、DB_PASSWORD、DB_NAMEを設定しておきます。

これらの値は、Dockerコンテナの初回立ち上げ時にPostgreSQLに登録されます。

2回目以降のアクセスでは、これらの値は一致していないとPostgreSQLにアクセスできなくなるので注意!

docker-compose.yml
services:
db:
  # もし拡張機能が必要ない場合はpostgres:17と記述
  image: pgvector/pgvector:pg17 
  container_name: <任意のコンテナ名>
  environment:
    POSTGRES_USER: ${DB_USER}
    POSTGRES_PASSWORD: ${DB_PASSWORD}
    POSTGRES_DB: ${DB_NAME}
  ports:
    - "5432:5432"
  volumes:
    - pgdata:/var/lib/postgresql/data
  restart: always

volumes:
pgdata:

.env
# 任意の値に変えてください
DB_USER="test"
DB_PASSWORD="test_password"
# データベースの名前を入力
DB_NAME="test-db"

実際の画面

image.png

Dockerコンテナの立ち上げ

次は、作ったdocker-compose.ymlを使ってコンテナを立ち上げ、PostgreSQLが使える環境にします。

コマンドプロンプトを立ち上げて、Dockerfileがあるフォルダと同じ位置まで移動した後以下を実行!

docker compose up -d

これで、imageで指定されたpgvector:pg17のイメージをもとにコンテナが作られます。

立ち上がったら、コンテナ内のPostgreSQLに入ります。

docker exec -it <docker-compose.ymlに記載したコンテナ名> psql -U <.envのDB_USER> -d <.envのDB_NAME>

コマンドの意味は、
docker exec: Dockerコンテナ内でコマンドを実行する
-it ~: 今立ち上げているターミナルから、直接入力できるようにする
psql: PostgreSQLを操作するコマンド
-U ~: ~のユーザー名に接続
-d ~: ~のデータベースに接続

ここまでできたら環境構築は完了!🎉🎉🎉

あとはDBやテーブルを作ればOKです。

テーブルを作ってみる

ここからはGeminiが考えたSQL文のコピペです💦

ベクトル検索を試してみます。

-- ① 拡張機能の有効化
CREATE EXTENSION IF NOT EXISTS vector;

-- ② テスト用テーブルの作成(3次元のベクトル列)
CREATE TABLE test_items (
  id serial PRIMARY KEY,
  name text,
  embedding vector(3)
);

-- ③ データの挿入(インサート)
INSERT INTO test_items (name, embedding) VALUES 
('リンゴ', '[1.0, 0.2, 0.1]'),
('バナナ', '[0.1, 0.9, 0.2]'),
('宇宙飛行士', '[0.0, 0.1, 0.9]');

作ったテーブルのデータをもとに、ベクトル検索を試します。

SELECT name, 1 - (embedding <=> '[0.0, 1.0, 0.0]') AS similarity 
FROM test_items 
ORDER BY embedding <=> '[0.0, 1.0, 0.0]' 
LIMIT 2;

embedding <=> '[0.0, 1.0, 0.0]' が「embeddingと[0.0, 1.0, 0.0]の類似度(コサイン距離)」を計算するためのpgvector専用の書き方みたいです。

試してみると、以下が出力されました🎉

  name  |     similarity      
--------+---------------------
 バナナ |  0.9704949586814732
 リンゴ | 0.19518002192997685
(2 rows)

まさかSQLDBでベクトル検索を簡単に実装できるとは驚きです!

終わりに

今回はPostgreSQLを試してみました。

まさかこんなに簡単にベクトル検索できるとは…最初はRAGづくりにAWS Kendraを使おうと思っていたのですが、利用料が高額で断念し代替手段を探しているときにPostgreSQLと出会いました。

今後はより詳細な使い方を調べていきたいと思います!

記載内容の間違いやアドバイス等ありましたらぜひお願いします☺️

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?