easy-postgresql-accessor
Version:
A powerful PostgreSQL data access layer with automatic schema discovery, CRUD operations, and SQL injection protection
150 lines (114 loc) โข 4.3 kB
Markdown
# Easy PostgreSQL Accessor
[](https://badge.fury.io/js/easy-postgresql-accessor)
[](https://opensource.org/licenses/MIT)
[](https://nodejs.org/)
> **PostgreSQL data access that automatically knows your table structure and performs smart operations.**
## โจ **What This Does**
**Automatically discover your PostgreSQL tables and perform intelligent CRUD operations without writing SQL or defining schemas.**
## ๐ **Key Benefits**
| Feature | What You Get |
|---------|--------------|
| ๐ **Auto Discovery** | Automatically learns table columns, constraints, and relationships |
| ๐ง **Smart Operations** | Intelligent upsert, CRUD, and batch operations |
| ๐ก๏ธ **SQL Injection Protection** | Built-in parameterized queries |
| โก **Zero Configuration** | Works out of the box with PostgreSQL |
## ๐ฆ **Installation**
```bash
npm install easy-postgresql-accessor
```
## โก **Quick Start (3 Steps)**
### **Step 1: Setup Environment**
```bash
# Copy and edit environment file
cp env.example .env
```
**Edit `.env` with your database:**
```env
DB_HOST=localhost
DB_PORT=5432
DB_NAME=your_database
DB_USER=your_username
DB_PASSWORD=your_password
DB_SCHEMA=public
```
### **Step 2: Discover Tables**
```javascript
const PostgreSQLAccessor = require('easy-postgresql-accessor');
const accessor = new PostgreSQLAccessor();
// ๐ Automatically learns table structure
await accessor.addTable('users');
await accessor.addTable('orders');
```
### **Step 3: Use Smart Operations**
```javascript
// ๐ง Smart upsert - automatically INSERT or UPDATE
const user = await accessor.upsert('users', {
email: 'john@example.com',
firstName: 'John',
lastName: 'Doe'
}, { email: 'john@example.com' });
// โ
Automatically detects if user exists
// โ
Chooses INSERT or UPDATE accordingly
```
## ๐ฏ **Core Methods**
| Method | Purpose | Example |
|--------|---------|---------|
| `addTable(tableName)` | Discover table schema | `await accessor.addTable('users')` |
| `upsert(table, data, conditions)` | Smart insert/update | `await accessor.upsert('users', userData, {email})` |
| `create(table, data)` | Create new records | `await accessor.create('users', userData)` |
| `read(table, conditions)` | Query records | `await accessor.read('users', {isActive: true})` |
| `update(table, data, conditions)` | Update records | `await accessor.update('users', {isActive: false}, {email})` |
| `delete(table, conditions)` | Delete records | `await accessor.delete('users', {email})` |
## ๐ **How It Works**
### **1. Schema Discovery**
```javascript
await accessor.addTable('users');
// โ
Discovers all columns and types
// โ
Finds primary keys and unique constraints
// โ
Maps foreign key relationships
// โ
Respects default values and constraints
```
### **2. Smart Operations**
```javascript
// The accessor KNOWS your schema, so it:
// - Only allows valid column names
// - Respects unique constraints for upserts
// - Uses primary keys for efficient lookups
// - Prevents SQL injection automatically
```
### **3. Zero Manual Work**
- โ No SQL writing required
- โ No schema definitions needed
- โ No manual column mapping
- โ
Just use your table names
## ๐ **Complete Example**
```javascript
const PostgreSQLAccessor = require('easy-postgresql-accessor');
async function example() {
const accessor = new PostgreSQLAccessor();
// Discover tables
await accessor.addTable('users');
await accessor.addTable('orders');
// Create user
const user = await accessor.create('users', {
email: 'jane@example.com',
firstName: 'Jane',
lastName: 'Smith'
});
// Smart upsert
const updatedUser = await accessor.upsert('users', {
email: 'jane@example.com',
lastLoginAt: new Date()
}, { email: 'jane@example.com' });
// Query users
const activeUsers = await accessor.read('users', { isActive: true });
}
```
## ๐งช **Testing**
```bash
npm test
```
## ๐ **License**
MIT License - see [LICENSE](LICENSE) file for details.
---
**PostgreSQL data access that thinks for itself** ๐ง โจ