<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Pgvector on heyaohua's Blog</title><link>https://blog.heyaohua.com/tags/pgvector/</link><description>Recent content in Pgvector on heyaohua's Blog</description><image><title>heyaohua's Blog</title><url>https://blog.heyaohua.com/og-image.png</url><link>https://blog.heyaohua.com/og-image.png</link></image><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Thu, 09 Oct 2025 12:00:00 +0800</lastBuildDate><atom:link href="https://blog.heyaohua.com/tags/pgvector/index.xml" rel="self" type="application/rss+xml"/><item><title>PostgreSQL Docker 部署指南</title><link>https://blog.heyaohua.com/posts/2025/10/postgresql-docker-deployment-guide/</link><pubDate>Thu, 09 Oct 2025 12:00:00 +0800</pubDate><guid>https://blog.heyaohua.com/posts/2025/10/postgresql-docker-deployment-guide/</guid><description>本指南详细介绍如何使用 Docker 部署一个包含 PostGIS、pgvector 和 TimescaleDB 扩展的 PostgreSQL 15 数据库。该方案解决了扩展兼容性问题，特别是 pgvector 的段错误问题。</description><content:encoded><![CDATA[<p>本指南详细介绍如何使用 Docker 部署一个包含 PostGIS、pgvector 和 TimescaleDB 扩展的 PostgreSQL 15 数据库。该方案解决了扩展兼容性问题，特别是 pgvector 的段错误问题。</p>
<h2 id="项目结构">项目结构</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>PgSQL/
</span></span><span style="display:flex;"><span>├── .env                          # 环境变量配置
</span></span><span style="display:flex;"><span>├── Dockerfile                    # PostgreSQL 镜像构建文件
</span></span><span style="display:flex;"><span>├── docker-compose.yml            # Docker Compose 配置
</span></span><span style="display:flex;"><span>├── README.md                     # 项目说明
</span></span><span style="display:flex;"><span>├── config/                       # 配置文件目录
</span></span><span style="display:flex;"><span>│   ├── pg_hba.conf              # 客户端认证配置
</span></span><span style="display:flex;"><span>│   └── postgresql.conf          # PostgreSQL 主配置
</span></span><span style="display:flex;"><span>├── data/                        # 数据持久化目录
</span></span><span style="display:flex;"><span>│   └── pgdata/                  # PostgreSQL 数据目录
</span></span><span style="display:flex;"><span>├── init-scripts/                # 初始化脚本
</span></span><span style="display:flex;"><span>│   └── 01-install-extensions.sql # 扩展安装脚本
</span></span><span style="display:flex;"><span>├── logs/                        # 日志目录
</span></span><span style="display:flex;"><span>└── test-examples.sql            # 测试示例
</span></span></code></pre></div><h2 id="快速开始">快速开始</h2>
<h3 id="1-环境准备">1. 环境准备</h3>
<p>确保系统已安装：</p>
<ul>
<li>Docker</li>
<li>Docker Compose</li>
</ul>
<h3 id="2-克隆或创建项目目录">2. 克隆或创建项目目录</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>mkdir -p ~/Server/PgSQL
</span></span><span style="display:flex;"><span><span style="color:#8be9fd;font-style:italic">cd</span> ~/Server/PgSQL
</span></span></code></pre></div><h3 id="3-配置环境变量">3. 配置环境变量</h3>
<p>创建 <code>.env</code> 文件：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span># PostgreSQL 数据库配置
</span></span><span style="display:flex;"><span>POSTGRES_DB=devdb
</span></span><span style="display:flex;"><span>POSTGRES_USER=postgres
</span></span><span style="display:flex;"><span>POSTGRES_PASSWORD=your_secure_password
</span></span><span style="display:flex;"><span>POSTGRES_PORT=5432
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span># 注意：请修改 POSTGRES_PASSWORD 为您的实际密码
</span></span><span style="display:flex;"><span># 建议使用强密码，包含大小写字母、数字和特殊字符
</span></span></code></pre></div><h3 id="4-构建镜像">4. 构建镜像</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>docker build -t postgres-all-extensions:latest .
</span></span></code></pre></div><h3 id="5-启动服务">5. 启动服务</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>docker-compose up -d
</span></span></code></pre></div><h3 id="6-验证安装">6. 验证安装</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#6272a4"># 检查容器状态</span>
</span></span><span style="display:flex;"><span>docker ps
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#6272a4"># 连接数据库验证扩展</span>
</span></span><span style="display:flex;"><span>docker <span style="color:#8be9fd;font-style:italic">exec</span> postgres-all-extensions psql -U postgres -d devdb -c <span style="color:#f1fa8c">&#34;SELECT extname, extversion FROM pg_extension WHERE extname IN (&#39;timescaledb&#39;, &#39;postgis&#39;, &#39;vector&#39;) ORDER BY extname;&#34;</span>
</span></span></code></pre></div><h2 id="详细配置说明">详细配置说明</h2>
<h3 id="dockerfile-解析">Dockerfile 解析</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>FROM postgres:15
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#6272a4"># 安装系统依赖</span>
</span></span><span style="display:flex;"><span>RUN apt-get update <span style="color:#ff79c6">&amp;&amp;</span> apt-get install -y <span style="color:#f1fa8c">\
</span></span></span><span style="display:flex;"><span>    build-essential <span style="color:#f1fa8c">\
</span></span></span><span style="display:flex;"><span>    postgresql-server-dev-15 <span style="color:#f1fa8c">\
</span></span></span><span style="display:flex;"><span>    cmake <span style="color:#f1fa8c">\
</span></span></span><span style="display:flex;"><span>    git <span style="color:#f1fa8c">\
</span></span></span><span style="display:flex;"><span>    wget <span style="color:#f1fa8c">\
</span></span></span><span style="display:flex;"><span>    ca-certificates <span style="color:#f1fa8c">\
</span></span></span><span style="display:flex;"><span>    postgresql-15-postgis-3 <span style="color:#f1fa8c">\
</span></span></span><span style="display:flex;"><span>    postgresql-15-postgis-3-scripts <span style="color:#f1fa8c">\
</span></span></span><span style="display:flex;"><span>    libkrb5-dev <span style="color:#f1fa8c">\
</span></span></span><span style="display:flex;"><span>    libgssapi-krb5-2 <span style="color:#f1fa8c">\
</span></span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">&amp;&amp;</span> rm -rf /var/lib/apt/lists/*
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#6272a4"># 安装 pgvector (预编译版本，避免段错误)</span>
</span></span><span style="display:flex;"><span>RUN <span style="color:#8be9fd;font-style:italic">cd</span> /tmp <span style="color:#ff79c6">&amp;&amp;</span> <span style="color:#f1fa8c">\
</span></span></span><span style="display:flex;"><span>    wget https://github.com/pgvector/pgvector/archive/v0.5.1.tar.gz <span style="color:#ff79c6">&amp;&amp;</span> <span style="color:#f1fa8c">\
</span></span></span><span style="display:flex;"><span>    tar -xzf v0.5.1.tar.gz <span style="color:#ff79c6">&amp;&amp;</span> <span style="color:#f1fa8c">\
</span></span></span><span style="display:flex;"><span>    <span style="color:#8be9fd;font-style:italic">cd</span> pgvector-0.5.1 <span style="color:#ff79c6">&amp;&amp;</span> <span style="color:#f1fa8c">\
</span></span></span><span style="display:flex;"><span>    make <span style="color:#ff79c6">&amp;&amp;</span> <span style="color:#f1fa8c">\
</span></span></span><span style="display:flex;"><span>    make install
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#6272a4"># 安装 TimescaleDB (从源码编译)</span>
</span></span><span style="display:flex;"><span>RUN <span style="color:#8be9fd;font-style:italic">cd</span> /tmp <span style="color:#ff79c6">&amp;&amp;</span> <span style="color:#f1fa8c">\
</span></span></span><span style="display:flex;"><span>    git clone https://github.com/timescale/timescaledb.git <span style="color:#ff79c6">&amp;&amp;</span> <span style="color:#f1fa8c">\
</span></span></span><span style="display:flex;"><span>    <span style="color:#8be9fd;font-style:italic">cd</span> timescaledb <span style="color:#ff79c6">&amp;&amp;</span> <span style="color:#f1fa8c">\
</span></span></span><span style="display:flex;"><span>    git checkout 2.13.0 <span style="color:#ff79c6">&amp;&amp;</span> <span style="color:#f1fa8c">\
</span></span></span><span style="display:flex;"><span>    ./bootstrap <span style="color:#ff79c6">&amp;&amp;</span> <span style="color:#f1fa8c">\
</span></span></span><span style="display:flex;"><span>    <span style="color:#8be9fd;font-style:italic">cd</span> build <span style="color:#ff79c6">&amp;&amp;</span> <span style="color:#f1fa8c">\
</span></span></span><span style="display:flex;"><span>    make <span style="color:#ff79c6">&amp;&amp;</span> <span style="color:#f1fa8c">\
</span></span></span><span style="display:flex;"><span>    make install
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#6272a4"># 配置 PostgreSQL</span>
</span></span><span style="display:flex;"><span>RUN <span style="color:#8be9fd;font-style:italic">echo</span> <span style="color:#f1fa8c">&#34;shared_preload_libraries = &#39;timescaledb&#39;&#34;</span> &gt;&gt; /usr/share/postgresql/postgresql.conf.sample
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#6272a4"># 复制初始化脚本</span>
</span></span><span style="display:flex;"><span>COPY init-scripts/ /docker-entrypoint-initdb.d/
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>EXPOSE <span style="color:#bd93f9">5432</span>
</span></span></code></pre></div><h3 id="docker-compose-配置">Docker Compose 配置</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#ff79c6">version</span>: <span style="color:#f1fa8c">&#39;3.8&#39;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#ff79c6">services</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">postgres-all-extensions</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">image</span>: postgres-all-extensions:latest
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">container_name</span>: postgres-all-extensions
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">environment</span>:
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">POSTGRES_DB</span>: ${POSTGRES_DB}
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">POSTGRES_USER</span>: ${POSTGRES_USER}
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">POSTGRES_PASSWORD</span>: ${POSTGRES_PASSWORD}
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">ports</span>:
</span></span><span style="display:flex;"><span>      - <span style="color:#f1fa8c">&#34;5432:5432&#34;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">volumes</span>:
</span></span><span style="display:flex;"><span>      - ./data/pgdata:/var/lib/postgresql/data
</span></span><span style="display:flex;"><span>      - ./config/postgresql.conf:/etc/postgresql/postgresql.conf
</span></span><span style="display:flex;"><span>      - ./config/pg_hba.conf:/etc/postgresql/pg_hba.conf
</span></span><span style="display:flex;"><span>      - ./logs:/var/log/postgresql
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">networks</span>:
</span></span><span style="display:flex;"><span>      - postgres-network
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">restart</span>: unless-stopped
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">healthcheck</span>:
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">test</span>: [<span style="color:#f1fa8c">&#34;CMD-SHELL&#34;</span>, <span style="color:#f1fa8c">&#34;pg_isready -U postgres&#34;</span>]
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">interval</span>: 30s
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">timeout</span>: 10s
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">retries</span>: <span style="color:#bd93f9">3</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#ff79c6">networks</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">postgres-network</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">driver</span>: bridge
</span></span></code></pre></div><h2 id="扩展功能测试">扩展功能测试</h2>
<h3 id="postgis-测试">PostGIS 测试</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sql" data-lang="sql"><span style="display:flex;"><span><span style="color:#6272a4">-- 创建几何数据
</span></span></span><span style="display:flex;"><span><span style="color:#ff79c6">SELECT</span> ST_AsText(ST_MakePoint(<span style="color:#ff79c6">-</span><span style="color:#bd93f9">71</span>.<span style="color:#bd93f9">064544</span>, <span style="color:#bd93f9">42</span>.<span style="color:#bd93f9">28787</span>));
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#6272a4">-- 空间查询示例
</span></span></span><span style="display:flex;"><span><span style="color:#ff79c6">CREATE</span> <span style="color:#ff79c6">TABLE</span> locations (
</span></span><span style="display:flex;"><span>    id <span style="color:#8be9fd;font-style:italic">SERIAL</span> <span style="color:#ff79c6">PRIMARY</span> <span style="color:#ff79c6">KEY</span>,
</span></span><span style="display:flex;"><span>    name <span style="color:#8be9fd;font-style:italic">VARCHAR</span>(<span style="color:#bd93f9">100</span>),
</span></span><span style="display:flex;"><span>    geom GEOMETRY(POINT, <span style="color:#bd93f9">4326</span>)
</span></span><span style="display:flex;"><span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#ff79c6">INSERT</span> <span style="color:#ff79c6">INTO</span> locations (name, geom) <span style="color:#ff79c6">VALUES</span>
</span></span><span style="display:flex;"><span>(<span style="color:#f1fa8c">&#39;Boston&#39;</span>, ST_SetSRID(ST_MakePoint(<span style="color:#ff79c6">-</span><span style="color:#bd93f9">71</span>.<span style="color:#bd93f9">0589</span>, <span style="color:#bd93f9">42</span>.<span style="color:#bd93f9">3601</span>), <span style="color:#bd93f9">4326</span>));
</span></span></code></pre></div><h3 id="pgvector-测试">pgvector 测试</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sql" data-lang="sql"><span style="display:flex;"><span><span style="color:#6272a4">-- 创建向量表
</span></span></span><span style="display:flex;"><span><span style="color:#ff79c6">CREATE</span> <span style="color:#ff79c6">TABLE</span> items (
</span></span><span style="display:flex;"><span>    id <span style="color:#8be9fd;font-style:italic">SERIAL</span> <span style="color:#ff79c6">PRIMARY</span> <span style="color:#ff79c6">KEY</span>,
</span></span><span style="display:flex;"><span>    embedding VECTOR(<span style="color:#bd93f9">3</span>)
</span></span><span style="display:flex;"><span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#6272a4">-- 插入向量数据
</span></span></span><span style="display:flex;"><span><span style="color:#ff79c6">INSERT</span> <span style="color:#ff79c6">INTO</span> items (embedding) <span style="color:#ff79c6">VALUES</span>
</span></span><span style="display:flex;"><span>(<span style="color:#f1fa8c">&#39;[1,2,3]&#39;</span>),
</span></span><span style="display:flex;"><span>(<span style="color:#f1fa8c">&#39;[4,5,6]&#39;</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#6272a4">-- 向量相似度查询
</span></span></span><span style="display:flex;"><span><span style="color:#ff79c6">SELECT</span> <span style="color:#ff79c6">*</span> <span style="color:#ff79c6">FROM</span> items <span style="color:#ff79c6">ORDER</span> <span style="color:#ff79c6">BY</span> embedding <span style="color:#ff79c6">&lt;-&gt;</span> <span style="color:#f1fa8c">&#39;[3,1,2]&#39;</span> <span style="color:#ff79c6">LIMIT</span> <span style="color:#bd93f9">5</span>;
</span></span></code></pre></div><h3 id="timescaledb-测试">TimescaleDB 测试</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sql" data-lang="sql"><span style="display:flex;"><span><span style="color:#6272a4">-- 创建时序表
</span></span></span><span style="display:flex;"><span><span style="color:#ff79c6">CREATE</span> <span style="color:#ff79c6">TABLE</span> sensor_data (
</span></span><span style="display:flex;"><span>    time TIMESTAMPTZ <span style="color:#ff79c6">NOT</span> <span style="color:#ff79c6">NULL</span>,
</span></span><span style="display:flex;"><span>    sensor_id <span style="color:#8be9fd;font-style:italic">INTEGER</span>,
</span></span><span style="display:flex;"><span>    temperature DOUBLE <span style="color:#ff79c6">PRECISION</span>,
</span></span><span style="display:flex;"><span>    humidity DOUBLE <span style="color:#ff79c6">PRECISION</span>
</span></span><span style="display:flex;"><span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#6272a4">-- 转换为超表
</span></span></span><span style="display:flex;"><span><span style="color:#ff79c6">SELECT</span> create_hypertable(<span style="color:#f1fa8c">&#39;sensor_data&#39;</span>, <span style="color:#f1fa8c">&#39;time&#39;</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#6272a4">-- 插入时序数据
</span></span></span><span style="display:flex;"><span><span style="color:#ff79c6">INSERT</span> <span style="color:#ff79c6">INTO</span> sensor_data <span style="color:#ff79c6">VALUES</span>
</span></span><span style="display:flex;"><span>(NOW(), <span style="color:#bd93f9">1</span>, <span style="color:#bd93f9">23</span>.<span style="color:#bd93f9">5</span>, <span style="color:#bd93f9">65</span>.<span style="color:#bd93f9">2</span>),
</span></span><span style="display:flex;"><span>(NOW() <span style="color:#ff79c6">-</span> <span style="color:#8be9fd;font-style:italic">INTERVAL</span> <span style="color:#f1fa8c">&#39;1 hour&#39;</span>, <span style="color:#bd93f9">1</span>, <span style="color:#bd93f9">22</span>.<span style="color:#bd93f9">8</span>, <span style="color:#bd93f9">64</span>.<span style="color:#bd93f9">1</span>);
</span></span></code></pre></div><h2 id="连接配置">连接配置</h2>
<h3 id="ide-连接参数">IDE 连接参数</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>Host: localhost
</span></span><span style="display:flex;"><span>Port: 5432
</span></span><span style="display:flex;"><span>Database: devdb (或 postgres)
</span></span><span style="display:flex;"><span>Username: postgres
</span></span><span style="display:flex;"><span>Password: [您在.env中设置的密码]
</span></span></code></pre></div><h3 id="命令行连接">命令行连接</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#6272a4"># 使用 Docker 容器内的 psql</span>
</span></span><span style="display:flex;"><span>docker <span style="color:#8be9fd;font-style:italic">exec</span> -it postgres-all-extensions psql -U postgres -d devdb
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#6272a4"># 使用外部 psql (需要安装 PostgreSQL 客户端)</span>
</span></span><span style="display:flex;"><span><span style="color:#8be9fd;font-style:italic">PGPASSWORD</span><span style="color:#ff79c6">=</span>your_password psql -h localhost -p <span style="color:#bd93f9">5432</span> -U postgres -d devdb
</span></span></code></pre></div><h2 id="管理命令">管理命令</h2>
<h3 id="启动停止服务">启动/停止服务</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#6272a4"># 启动服务</span>
</span></span><span style="display:flex;"><span>docker-compose up -d
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#6272a4"># 停止服务</span>
</span></span><span style="display:flex;"><span>docker-compose down
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#6272a4"># 重启服务</span>
</span></span><span style="display:flex;"><span>docker-compose restart
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#6272a4"># 查看日志</span>
</span></span><span style="display:flex;"><span>docker-compose logs -f
</span></span></code></pre></div><h3 id="数据备份与恢复">数据备份与恢复</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#6272a4"># 备份数据库</span>
</span></span><span style="display:flex;"><span>docker <span style="color:#8be9fd;font-style:italic">exec</span> postgres-all-extensions pg_dump -U postgres devdb &gt; backup.sql
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#6272a4"># 恢复数据库</span>
</span></span><span style="display:flex;"><span>docker <span style="color:#8be9fd;font-style:italic">exec</span> -i postgres-all-extensions psql -U postgres devdb &lt; backup.sql
</span></span></code></pre></div><h3 id="性能监控">性能监控</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#6272a4"># 查看容器资源使用</span>
</span></span><span style="display:flex;"><span>docker stats postgres-all-extensions
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#6272a4"># 查看数据库连接</span>
</span></span><span style="display:flex;"><span>docker <span style="color:#8be9fd;font-style:italic">exec</span> postgres-all-extensions psql -U postgres -c <span style="color:#f1fa8c">&#34;SELECT * FROM pg_stat_activity;&#34;</span>
</span></span></code></pre></div><h2 id="安全建议">安全建议</h2>
<ol>
<li>修改默认密码：确保在 <code>.env</code> 文件中设置强密码</li>
<li>网络安全：生产环境中限制 <code>pg_hba.conf</code> 的访问范围</li>
<li>数据加密：考虑启用 SSL/TLS 连接</li>
<li>定期备份：建立自动化备份策略</li>
<li>更新维护：定期更新 PostgreSQL 和扩展版本</li>
</ol>
<h2 id="版本信息">版本信息</h2>
<ul>
<li>PostgreSQL: 15.14</li>
<li>PostGIS: 3.6.0</li>
<li>pgvector: 0.5.1</li>
<li>TimescaleDB: 2.13.0</li>
</ul>
<h2 id="许可证">许可证</h2>
<p>本项目遵循 MIT 许可证。各个扩展遵循其各自的许可证条款。</p>
]]></content:encoded></item></channel></rss>