Skip to content

Quick Reference - API User Setup โ€‹

๐Ÿš€ One-Command Setup โ€‹

bash
# 1. Edit password in script
nano Database/user/create_api_user.sql

# 2. Run script
psql -U postgres -d lafaekstreet -f Database/user/create_api_user.sql

# 3. Update .env
echo "DATABASE_URL=postgresql+asyncpg://lafaekstreet_api:YOUR_PASSWORD@localhost:5432/lafaekstreet" >> lafaekstreet_backend/.env

# 4. Test connection
psql -U lafaekstreet_api -d lafaekstreet -c "SELECT current_user;"

๐Ÿ“‹ Common Commands โ€‹

Connect to Database โ€‹

bash
# As API user
psql -U lafaekstreet_api -d lafaekstreet

# As postgres (admin)
psql -U postgres -d lafaekstreet

Change Password โ€‹

sql
-- As postgres user
ALTER USER lafaekstreet_api WITH PASSWORD 'NewPassword123!';

View Permissions โ€‹

sql
-- Check what user can do
\du lafaekstreet_api

-- Detailed permissions
SELECT grantee, privilege_type, table_name
FROM information_schema.role_table_grants
WHERE grantee = 'lafaekstreet_api'
LIMIT 20;

Monitor Connections โ€‹

sql
-- Active connections
SELECT COUNT(*) FROM pg_stat_activity WHERE usename = 'lafaekstreet_api';

-- Connection details
SELECT pid, client_addr, state, query_start
FROM pg_stat_activity
WHERE usename = 'lafaekstreet_api';

Kill Connections โ€‹

sql
-- Terminate all API user connections (as postgres)
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE usename = 'lafaekstreet_api';

๐Ÿ” Connection Strings โ€‹

Development (Local) โ€‹

bash
DATABASE_URL=postgresql+asyncpg://lafaekstreet_api:PASSWORD@localhost:5432/lafaekstreet

Production (Aiven) โ€‹

bash
DATABASE_URL=postgresql+asyncpg://lafaekstreet_api:PASSWORD@host.aivencloud.com:12345/lafaekstreet?sslmode=require

Docker โ€‹

bash
DATABASE_URL=postgresql+asyncpg://lafaekstreet_api:PASSWORD@postgres:5432/lafaekstreet

โœ… Permissions Summary โ€‹

OperationAllowedTables Affected
SELECTโœ… YesAll tables
INSERTโœ… YesAll tables
UPDATEโœ… YesAll tables
DELETEโœ… YesAll tables
EXECUTEโœ… YesAll functions
DROPโŒ NoNone
TRUNCATEโŒ NoNone
CREATEโŒ NoNone
ALTERโŒ NoNone

๐Ÿงช Test Queries โ€‹

sql
-- Test read
SELECT COUNT(*) FROM users;

-- Test write
INSERT INTO app_settings (setting_key, setting_value)
VALUES ('test', 'value');

-- Test update
UPDATE app_settings SET setting_value = 'new' WHERE setting_key = 'test';

-- Test delete
DELETE FROM app_settings WHERE setting_key = 'test';

-- Test function
SELECT * FROM find_nearby_reports(-8.5569, 125.5603, 1000, 10);

๐Ÿ”ง Configuration โ€‹

SettingValuePurpose
Max Connections50Prevent connection exhaustion
Statement Timeout30sKill long queries
Idle Timeout5minClose inactive connections
TimezoneUTCConsistent timestamps
Search PathpublicDefault schema

๐Ÿ› Troubleshooting โ€‹

"Connection refused" โ€‹

bash
# Check PostgreSQL is running
sudo systemctl status postgresql

# Check port
sudo netstat -plnt | grep 5432

"Password authentication failed" โ€‹

bash
# Reset password
psql -U postgres -c "ALTER USER lafaekstreet_api WITH PASSWORD 'NewPass123!';"

"Permission denied" โ€‹

bash
# Re-run setup script
psql -U postgres -d lafaekstreet -f Database/user/create_api_user.sql

"Too many connections" โ€‹

sql
-- Check current connections
SELECT COUNT(*) FROM pg_stat_activity WHERE usename = 'lafaekstreet_api';

-- Increase limit
ALTER USER lafaekstreet_api CONNECTION LIMIT 100;

๐Ÿ“ž Need Help? โ€‹

  • Full documentation: Database/user/README.md
  • Backend README: lafaekstreet_backend/README.md
  • Database schema: Database/schema.sql

Built for Timor-Leste