Use natural language to retrieve database values realtime and have ChatGPT analyze data from storage options from Supabase or Vercel - KV or Postgres DB. Host your own Next14 Admin API to securely browse your DB through ChatGPT
This is a Next.js project bootstrapped with create-next-app
for storing database connection strings for various side projects.
This API using Next14 enables me to have a custom GPT in ChatGPT where I can query data from various side project. I can now ask ChatGPT how many users do I have and other SQL queries using natural language.
You could extend this API to build a frontend application to manage your side projects.
Get connection string for my project BuyMyRepo, then use it to understand my database. Once understood, show me a table of my users with their app profile details in a nice table.
Deploy this project in one click:
Check out our Next.js deployment documentation for more details.
- Deploy this project to Vercel with your .env values for a PostgresQL DATABASE_URL and your own API_KEY password
- Click Actions
- ***Choose API KEY option for Authorization and select the option "Custom" header
- Set the custom header value to "api-key"*** & set your API_KEY value here
- Copy & Paste the following YAML spec into the "Schema":
openapi: 3.1.0
info:
title: PostgreSQL Database Viewer API
description: API for interacting with PostgreSQL databases to retrieve schema, query tables dynamically, and manage project connection strings.
version: "1.0.0"
servers:
- url: https://postgre-sql-databse-viewer-action.vercel.app
components:
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: api-key
schemas:
Project:
type: object
properties:
projectName:
type: string
description: The name of the project.
connectionString:
type: string
description: The connection string for the PostgreSQL database.
ErrorResponse:
type: object
properties:
error:
type: string
details:
type: object
security:
- ApiKeyAuth: []
paths:
/api/get-db-schema:
post:
operationId: getDbSchema
summary: Get Database Schema
description: Retrieve the schema (table names and column details) from the specified PostgreSQL database.
security:
- ApiKeyAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Project'
responses:
'200':
description: Schema information retrieved successfully.
content:
application/json:
schema:
type: array
items:
type: object
properties:
table_name:
type: string
column_name:
type: string
data_type:
type: string
'401':
description: Unauthorized. API key is missing or invalid.
'500':
description: Error querying the database schema.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/api/query-table:
post:
operationId: queryTable
summary: Query Table
description: Query a specified table in the PostgreSQL database and retrieve records based on optional conditions.
security:
- ApiKeyAuth: []
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
connectionString:
type: string
description: Connection string for the PostgreSQL database.
table:
type: string
description: The name of the table to query.
fields:
type: array
items:
type: string
description: Optional array of fields to retrieve.
conditions:
type: object
description: Optional conditions for querying records.
responses:
'200':
description: Records retrieved successfully.
content:
application/json:
schema:
type: array
items:
type: object
additionalProperties:
type: string
'401':
description: Unauthorized. API key is missing or invalid.
'500':
description: Error querying the table.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/api/projects:
post:
operationId: createProject
summary: Create Project
description: Add a new project with its corresponding connection string to the system.
security:
- ApiKeyAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Project'
responses:
'201':
description: Project added successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/Project'
'401':
description: Unauthorized. API key is missing or invalid.
'500':
description: Error adding project.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/api/projects/{projectName}:
get:
operationId: getProjectConnectionString
summary: Get Project Connection String
description: Retrieve the connection string for a project by its name.
security:
- ApiKeyAuth: []
parameters:
- name: projectName
in: path
required: true
schema:
type: string
description: The name of the project.
responses:
'200':
description: Connection string retrieved successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/Project'
'401':
description: Unauthorized. API key is missing or invalid.
'404':
description: Project not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Error retrieving project connection string.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
- POST: Add Project and Connection String
curl -X POST http://localhost:3000/api/projects \
-H "api-key: MOCHA1233" \
-H "Content-Type: application/json" \
-d '{"projectName": "MyProject", "connectionString": "postgres://your_db_user:your_db_password@localhost:5432/your_db_name"}'
- GET: Retrieve Connection String by Project Name
curl -X GET http://localhost:3000/api/projects/MyProject \
-H "api-key: API-KEY-HERE"
- POST: Fetch Schema Information from a Database
curl -X POST http://localhost:3000/api/fetch-schema \
-H "api-key: API-KEY-HERE" \
-H "Content-Type: application/json" \
-d '{"connectionString": "postgres://your_db_user:your_db_password@localhost:5432/your_db_name"}'
- POST: Query a Table with Fields and Conditions
curl -X POST http://localhost:3000/api/query-table \
-H "api-key: API-KEY-HERE" \
-H "Content-Type: application/json" \
-d '{"connectionString": "postgres://your_db_user:your_db_password@localhost:5432/your_db_name", "table": "your_table", "fields": ["field1", "field2"], "conditions": {"field1": "value1"}}'
First, run the development server:
npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun dev
Open http://localhost:3000 with your browser to see the result.
You can start editing the page by modifying app/page.tsx
. The page auto-updates as you edit the file.
This project uses next/font
to automatically optimize and load Inter, a custom Google Font.
To learn more about Next.js, take a look at the following resources:
- Next.js Documentation - learn about Next.js features and API.
- Learn Next.js - an interactive Next.js tutorial.
You can check out the Next.js GitHub repository - your feedback and contributions are welcome!