pgsqlite supports Unix domain sockets for local connections, providing lower latency and better security than TCP connections for local clients.
# Enable Unix socket (default: /tmp)
pgsqlite --socket-dir /tmp
# Connect with psql
psql -h /tmp -p 5432 -d your_database
# Unix socket only (disable TCP)
pgsqlite --socket-dir /var/run/pgsqlite --no-tcpWhen Unix socket support is enabled, pgsqlite creates a socket file named .s.PGSQL.{port} in the specified directory. This follows PostgreSQL's naming convention, ensuring compatibility with all PostgreSQL clients.
| Option | CLI Flag | Environment Variable | Default | Description |
|---|---|---|---|---|
| Socket Directory | --socket-dir |
PGSQLITE_SOCKET_DIR |
/tmp |
Directory for Unix socket file |
| Disable TCP | --no-tcp |
PGSQLITE_NO_TCP |
false |
Use only Unix socket, no TCP |
# Standard connection
psql -h /tmp -p 5432 -d mydatabase
# Using connection string
psql "postgresql:///mydatabase?host=/tmp&port=5432"import psycopg2
# Connect via Unix socket
conn = psycopg2.connect(
host='/tmp', # Socket directory
port=5432,
database='mydatabase'
)
# Alternative using DSN
conn = psycopg2.connect("host=/tmp port=5432 dbname=mydatabase")const { Client } = require('pg')
const client = new Client({
host: '/tmp',
port: 5432,
database: 'mydatabase'
})import (
"database/sql"
_ "github.com/lib/pq"
)
db, err := sql.Open("postgres", "host=/tmp port=5432 dbname=mydatabase sslmode=disable")Unix sockets provide several security advantages:
- Local-only access: No network exposure
- File system permissions: Control access via directory/file permissions
- No SSL overhead: Secure by default for local connections
- Process isolation: Can restrict to specific users/groups
# Create dedicated directory with restricted permissions
sudo mkdir -p /var/run/pgsqlite
sudo chown myuser:mygroup /var/run/pgsqlite
sudo chmod 750 /var/run/pgsqlite
# Run pgsqlite
pgsqlite --socket-dir /var/run/pgsqliteUnix sockets typically provide:
- Lower latency: No TCP/IP stack overhead
- Higher throughput: Direct kernel communication
- Less CPU usage: No packet processing
Benchmarks show 10-20% performance improvement over TCP for local connections.
# Standard development configuration
pgsqlite --socket-dir /tmp --database dev.db# Secure production configuration
pgsqlite \
--socket-dir /var/run/pgsqlite \
--no-tcp \
--database /data/production.dbFROM rust:latest
# Create socket directory
RUN mkdir -p /var/run/pgsqlite
# Volume for socket access
VOLUME ["/var/run/pgsqlite"]
CMD ["pgsqlite", "--socket-dir", "/var/run/pgsqlite"]# docker-compose.yml
services:
pgsqlite:
image: pgsqlite
volumes:
- pgsqlite-socket:/var/run/pgsqlite
- ./data:/data
command: ["--socket-dir", "/var/run/pgsqlite", "--database", "/data/app.db"]
app:
image: myapp
volumes:
- pgsqlite-socket:/var/run/pgsqlite
environment:
DATABASE_HOST: /var/run/pgsqlite
DATABASE_PORT: 5432
volumes:
pgsqlite-socket:-
"No such file or directory" error
- Ensure socket directory exists
- Check client is using correct directory path
-
Permission denied
- Verify user has access to socket directory
- Check socket file permissions
-
Socket file not created
- Confirm pgsqlite started successfully
- Check logs for binding errors
# Check if socket exists
ls -la /tmp/.s.PGSQL.5432
# Verify permissions
stat /tmp/.s.PGSQL.5432
# Test connection
psql -h /tmp -p 5432 -c "SELECT 1"- Default socket directory:
/tmp - Alternative:
/var/run/postgresql
- Default socket directory:
/tmp - Note:
/vardirectories may require sudo
- Unix sockets not supported
- Use TCP connections on Windows
- Use dedicated directory for production (
/var/run/pgsqlite) - Set appropriate permissions on socket directory
- Monitor socket file existence in health checks
- Clean up stale sockets on startup
- Document socket path for client applications