October DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsPC HealthRecommendedCrashes, freezes, slowdowns? Check your PC nowSpot repairable issues before they interrupt work.Check PCOctober DealsAmazon USDeal season is back - check today's better picksAmazon US: current deals, useful picks and tech finds.See Picks×
Skip to content
World desk4 min

Postgres for Local Development: One Container, One Makefile

A compact Compose service and Makefile make local PostgreSQL easy to start, connect to, inspect, and stop—without losing data when the container is removed.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Run PostgreSQL locally without installing the server: define one PostgreSQL service in Docker Compose, persist its files in a named volume, and use a Makefile to make routine commands easy to remember. Bind the published port to 127.0.0.1 if only programs on your computer need to connect. The database container can be replaced; the named volume is what keeps its data.

Set up one PostgreSQL container with Compose

Create compose.yaml in your project root. This PostgreSQL 18 example uses a named volume, publishes the database only on the local machine, and reads its password from the environment:

services:
  db:
    image: postgres:18
    restart: unless-stopped
    environment:
      POSTGRES_USER: ${POSTGRES_USER:-postgres}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD in .env}
      POSTGRES_DB: ${POSTGRES_DB:-postgres}
    ports:
      - "127.0.0.1:5432:5432"
    volumes:
      - postgres_data:/var/lib/postgresql

volumes:
  postgres_data:

Docker’s PostgreSQL guide uses the postgres:18 image and mounts storage at /var/lib/postgresql. For PostgreSQL 18 and later, the official image uses version-specific subdirectories beneath that parent path. Do not blindly reuse the older /var/lib/postgresql/data mount convention with these images; see the PostgreSQL Docker Official Image documentation.

Create a local .env file with values for POSTGRES_PASSWORD, POSTGRES_USER, and POSTGRES_DB. Keep real credentials out of version control; add .env to .gitignore if it is not already excluded. Compose substitutes these values when it reads the file. The image requires POSTGRES_PASSWORD for normal initialization; the user and database settings are optional and have defaults. These settings initialize a new database, not an existing one.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
#1 Best Overall
CanaKit Raspberry Pi 4 4GB Starter PRO Kit - 4GB RAM
  • Includes Raspberry Pi 4 4GB Model B with 1.5GHz 64-bit quad-core CPU (4GB RAM)
  • Includes Pre-Loaded 32GB EVO+ Micro SD Card (Class 10), USB MicroSD Card Reader
  • CanaKit Premium High-Gloss Raspberry Pi 4 Case with Integrated Fan Mount, CanaKit Low Noise Bearing System Fan
  • CanaKit 3.5A USB-C Raspberry Pi 4 Power Supply (US Plug) with Noise Filter, Set of Heat Sinks, Display Cable - 6 foot (Supports up to 4K60p)
  • CanaKit USB-C PiSwitch (On/Off Power Switch for Raspberry Pi 4)

Why choose a named volume?

The declared postgres_data volume stores database files independently of the container. Compose creates it if needed and reuses it on later starts. Removing or recreating the container therefore does not, by itself, erase the database. Docker describes named volumes as the simpler choice for most cases; a bind mount is an alternative when you specifically need files at a host path, but host permissions and ownership can complicate it. See Docker’s volume documentation.

Why bind the port to loopback?

The mapping 127.0.0.1:5432:5432 lets host-run tools such as psql and GUI clients reach the database at localhost:5432 without publishing it on other network interfaces. Docker’s guide recommends loopback binding for a development database meant for the same host. Remove the loopback restriction only when you have a specific need for access from elsewhere and understand the exposure.

Put repeatable commands in a Makefile

A Makefile can serve as a short interface for starting, inspecting, connecting to, and stopping the service. Add this as Makefile alongside compose.yaml:

.PHONY: help up down status logs psql reset

help:
	@printf '%sn' 
	  'up      Start PostgreSQL' 
	  'down    Stop and remove the container; keep database data' 
	  'status  Show Compose services' 
	  'logs    Follow PostgreSQL logs' 
	  'psql    Open psql inside the container' 
	  'reset   DESTRUCTIVE: remove the container and database volume'

up:
	docker compose up -d

down:
	docker compose down

status:
	docker compose ps

logs:
	docker compose logs -f db

psql:
	docker compose exec db psql -U "$${POSTGRES_USER:-postgres}" -d "$${POSTGRES_DB:-postgres}"

reset:
	docker compose down -v

Make recipes must begin with a tab. Run make help to see the available targets, then use make up to start the service. make psql runs the client inside the database container; a host-installed psql or GUI client can instead connect to host localhost, port 5432, using the database and credentials from .env.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #3
CanaKit Raspberry Pi 5 Starter Kit PRO - Turbine Black (128GB Edition) (8GB RAM)
  • Includes Raspberry Pi 5 with 2.4Ghz 64-bit quad-core CPU (8GB RAM)
  • Includes 128GB Micro SD Card pre-loaded with 64-bit Raspberry Pi OS, USB MicroSD Card Reader
  • CanaKit Turbine Black Case for the Raspberry Pi 5
  • CanaKit Low Noise Bearing System Fan
  • Mega Heat Sink - Black Anodized

Check readiness before connecting

docker compose up -d starts the container in the background, but a running container is not necessarily ready to accept database connections. Docker states that “On startup, Compose does not wait until a container is ‘ready’, only until it’s running.” For a person connecting from the host, check status or retry the connection after startup; make logs can help show what the database is doing.

For a repeatable readiness check, add this service configuration under db in compose.yaml:

Rank #4
Raspberry Pi 4 Computer Model B 8GB Single Board Computer Suitable for Building Mini PC/Smart Robot/Game Console/Workstation/Media Center/Etc.
  • powful cputhe cpu of the raspberry pi 4 model b adopts the latest arm cortex-a72 architecture, which is also used in high-performance smartphones, and has evolved into a real pc.the operating clock has been changed from pi3's 1.2ghz to 1.5ghz, and the speed has become a different dimension with the updated architecture.
  • video output/gputhe on-board gpu of the raspberry pi 4 supports 4kp@60 and newly supports h.265 decoding, opengl es 3.0, etc.as for the video output, two micro hdmis with smaller connectors are installed, and the raspberry pi 4 also supports dual screen output.
  • usb 3.0with a new soc, the speed of the raspberry pi 4 around i/o has been improved, and finally usb 3.0 is supported.usb boot is faster and more convenient.
  • network&bluetoothgigabit ethernet (wired lan) has also been significantly speeded up from 300mbps of pi 3b + to 1000mbps (logical value).in addition, bluetooth supported version has been upgraded to 5.0, and the transfer speed of pi 4 has been doubled.
  • power input connectorthe power input connector of the raspberry pi 4 has been changed to usb type c. it is easier to use than micro usb and can supply a larger current reliably.the power requirement of raspberry pi 4 model b is 5v 3.0a, which is higher than the previous model.
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
      interval: 5s
      timeout: 5s
      retries: 5

Then docker compose ps reports health as well as service state. The double dollar signs defer variable expansion to the container. This healthcheck is useful even in a one-service setup, but it becomes especially important if you later add a containerized application: configure that app’s dependency on db with condition: service_healthy. Compose’s startup-order documentation explains the readiness condition and pg_isready approach.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Know what persists—and what reset deletes

Changing POSTGRES_PASSWORD, POSTGRES_USER, POSTGRES_DB, or an initialization script does not reconfigure a database that has already been initialized in the volume. The official image’s initialization behavior applies when the data directory is empty; an existing database is left in place on subsequent starts. Change an existing database using PostgreSQL itself, or reset only when you deliberately want a fresh, empty database.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Best Value
SANOOV Raspberry Pi 5 4GB Kit, 4GB RAM Single Board Computer with Active Cooler and ABS Case, Complete Raspberry Pi 5 Starter Kit for IoT Robotics Retro Gaming
  • All-in-One Complete Kit: This SANOOV RPi 5 bundle comes with Raspberry Pi 5 4GB RAM single board, active cooler, durable ABS case and screwdriver. No extra parts needed, ready to use right out of the box for beginners and hobbyists
  • Powerful Single Board Computer: Equipped with 4GB RAM and high-performance processor, delivers fast running speed for 4K playback, AI projects, programming and daily computing tasks. SANOOV for raspberry pi 5 4GB is equipped with broadcom 64 quad-core Arm Cortex A76 processor with gigabit ethernet and upgraded with IEEE 802.11ac Wi-Fi, Bluetooth 5.0 dual-band 2.4Ghz and 5Ghz and Power Over Ethernet (POE). Upgrading delivers 2-3 x speed vs Pi 4, redefining the experience
  • Efficient Active Cooler: Effectively lowers operating temperature and prevents performance throttling. Runs quietly even under long-time heavy load, ensures stable operation all day long. SANOOV RPi 5 4GB kit offer an active cooler, which combines an aluminium heatsink with a high-performance PWM fan. Active cooler is fully compatible with the Pi OS, which can effectively reduce the temperature of RPi5 and ensure its good performance during long-term high load operation
  • Sturdy ABS Protective Case: Well-fitted for Raspberry Pi 5 board, can be secured with 4 screws to effectively protect the Pi 5 motherboard from damage, reserves full access to all ports and buttons. SANOOV uses ABS material to produce the case, which has a softer texture and feel. Meanwhile, SANOOV case adopts a layered design for easy disassembly and installation. (Tip: The Case cannot install M.2 HAT Add on Board and Solid State Drive!)
  • Wide Application & Full Compatibility: Seamlessly compatible with official OS and mainstream peripheral accessories for Raspberry Pi 5. Whether you are a beginner, student, electronics hobbyist or professional developer, this all-in-one kit meets your diverse needs. It excels in IoT projects, robotics design, retro gaming devices, home media servers and other DIY creations. Backed by a large global community, you can easily find guides, technical support and shared projects online

make down stops and removes Compose’s containers while retaining the named volume. make reset runs docker compose down -v, which also removes the volume and deletes its database data. Export anything you need before using it. Docker documents this distinction in its volume guidance and PostgreSQL guide.

Quick Recap

Bestseller No. 1
CanaKit Raspberry Pi 4 4GB Starter PRO Kit - 4GB RAM
CanaKit Raspberry Pi 4 4GB Starter PRO Kit - 4GB RAM
Includes Raspberry Pi 4 4GB Model B with 1.5GHz 64-bit quad-core CPU (4GB RAM); Includes Pre-Loaded 32GB EVO+ Micro SD Card (Class 10), USB MicroSD Card Reader
$159.99
Bestseller No. 3
CanaKit Raspberry Pi 5 Starter Kit PRO - Turbine Black (128GB Edition) (8GB RAM)
CanaKit Raspberry Pi 5 Starter Kit PRO - Turbine Black (128GB Edition) (8GB RAM)
Includes Raspberry Pi 5 with 2.4Ghz 64-bit quad-core CPU (8GB RAM); CanaKit Turbine Black Case for the Raspberry Pi 5
$259.95

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

More from the Wire

  1. World desk4 min
    How to Spot an AI Voice Scam Before Sending MoneyDon’t rely on how a caller sounds. Pause, call back through a known number, and verify the emergency with another trusted person before sending money.
  2. Mountain View desk4 min
    Google’s SynthID Detector: How to Check AI-Generated Images, Video and AudioGoogle’s SynthID Detector looks for an embedded watermark in supported images, video and audio. Here is what its results do—and do not—show.
  3. Redmond desk20 min
    How to create a link to File or Folder in Windows 11Windows 11 gives you several ways to point to a file or folder without moving or duplicating it. You can create a desktop shortcut,…
Recommended PC Tool
Recommended PC Tool
PC Slower Than It Used to Be?Free scan - under a minute
Crashes, No Sound, or Screen Glitches?Free driver scan

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.