Repository files navigation

pgrsql

A beautiful, fast TUI SQL editor for PostgreSQL written in Rust.

pgrsqlLicense

Features

  • Visual Database Browser: Navigate databases, schemas, and tables in a tree view
  • SQL Syntax Highlighting: Keywords, strings, numbers, and comments are color-coded
  • Query Results Table: Scrollable, navigable results with cell selection
  • Query History: Persistent history with search capability
  • Connection Management: Save and manage multiple PostgreSQL connections
  • Table Inspector: View table structure, columns, indexes, and DDL without writing queries
  • Export Results: Export query results to CSV, JSON, SQL INSERT, or TSV
  • Keyboard-First Design: Efficient navigation without leaving the keyboard
  • Dark Theme: Easy on the eyes for long coding sessions

Installation

Prerequisites

  • Rust (1.70 or later)
  • PostgreSQL server to connect to

From Source

git clone https://github.com/yourusername/pgrsql.git
cd pgrsql
cargo build --release

The binary will be at target/release/pgrsql.

With Cargo

cargo install --path .

Or once published:

cargo install pgrsql

Quick Start

  1. Launch pgrsql:

    pgrsql
  2. Connect to your database:

    • A connection dialog appears on startup
    • Your last-used connection is auto-populated (just enter your password)
    • Enter your PostgreSQL connection details:
      • Name: A friendly name for this connection
      • Host: Database host (e.g., localhost)
      • Port: Database port (default: 5432)
      • Database: Database name (e.g., postgres)
      • Username: Your PostgreSQL username
      • Password: Your password (must be entered each session for security)
    • Press Enter to connect
    • Use Up/Down to select saved connections, Del to delete them
  3. Write and execute queries:

    • Type your SQL in the editor pane
    • Press F5 or Ctrl+Enter to execute
    • Results appear in the bottom pane with row count and execution time
  4. Browse your schema:

    • Use the sidebar (left pane) to explore
    • Press 1, 2, or 3 to switch between Databases, Tables, and History tabs
    • Press Enter on a table to insert its name into the editor

Usage

Layout

┌─────────────────────────────────────────────────────────────┐
│ pgrsql user@localhost:5432/mydb | mydb | public │
├──────────────┬──────────────────────────────────────────────┤
│ Databases │ Query Editor │
│ Tables │ │
│ History │ SELECT * FROM users │
│ │ WHERE active = true; │
│ ▼ public │ │
│ ├ users ├──────────────────────────────────────────────┤
│ ├ orders │ Results (1/1) │
│ └ products │ id │ name │ email │ active │
│ │ 1 │ Alice │ alice@test.com │ true │
│ │ 2 │ Bob │ bob@test.com │ true │
├──────────────┴──────────────────────────────────────────────┤
│ 2 rows returned (12.34ms) │
└─────────────────────────────────────────────────────────────┘

Keyboard Shortcuts

Global

KeyAction
Ctrl+QQuit pgrsql
Ctrl+COpen connection dialog
?Toggle help overlay

Navigation

KeyAction
TabNext pane (Sidebar → Editor → Results → Sidebar)
Shift+TabPrevious pane

Note: In the Editor, Tab inserts spaces. Use Shift+Tab to go back to the Sidebar, or execute a query (F5) to move to Results.

Editor

KeyAction
F5 or Ctrl+EnterExecute query
Ctrl+LClear editor
Ctrl+UpPrevious query from history
Ctrl+DownNext query from history
Ctrl+CCopy selection
Ctrl+XCut selection
Ctrl+VPaste from clipboard
Ctrl+ASelect all
Ctrl+Left/RightMove by word
Home/EndMove to line start/end
Ctrl+Home/EndMove to document start/end

Sidebar

KeyAction
1 / 2 / 3Switch sidebar tab (Databases / Tables / History)
Up/DownNavigate items
EnterSelect/expand item
Ctrl+IOpen Table Inspector (when a table is selected)

Results

KeyAction
Arrow keysNavigate cells
Ctrl+CCopy selected cell value
Ctrl+[ / Ctrl+]Previous / Next result set
PageUp/PageDownScroll results
Home/EndJump to first/last column
Ctrl+SExport results (opens format picker)

Table Inspector

KeyAction
DToggle between Structure and DDL views
Ctrl+CCopy DDL to clipboard (in DDL view)
Up/DownScroll content
PageUp/PageDownScroll by 10 lines
Esc or qClose inspector

Table Inspector

The Table Inspector lets you view table metadata without writing SQL queries.

  1. Switch to the Tables tab (2) in the sidebar
  2. Expand a schema and select a table
  3. Press Ctrl+I to open the inspector

Structure View (default): Shows columns with their data types, nullability, primary key indicators, and default values. Also displays indexes with their columns and uniqueness.

DDL View (press D): Shows the full CREATE TABLE statement including all column definitions, constraints, and indexes. Press Ctrl+C to copy the DDL to your clipboard.

Working with Multiple Databases

  1. Press 1 to switch to the Databases tab in the sidebar
  2. Use arrow keys to select a database
  3. Press Enter to switch to that database
  4. The schema browser will refresh with the new database's contents

Working with Schemas

  1. Press 2 to switch to the Tables tab
  2. Schemas are shown with (collapsed) or (expanded)
  3. Press Enter on a schema to expand/collapse it
  4. Press Enter on a table to insert schema.table into the editor

Query History

  1. Press 3 to switch to the History tab
  2. Browse previous queries (most recent at top)
  3. Press Enter to load a query into the editor
  4. Use Ctrl+Up/Down in the editor to quickly cycle through history

Configuration

Connection Management

  • Last-used connection: Automatically pre-populated on startup with cursor on the password field
  • Saved connections: Browse with Up/Down, load with Enter, delete with Del
  • Password security: Passwords are never saved to disk; you must enter your password each session

Saved connections are stored in:

  • Linux/macOS: ~/.config/pgrsql/connections.toml
  • Windows: %APPDATA%\pgrsql\connections.toml

Format:

[[connections]]
name = "Production"host = "prod-db.example.com"port = 5432database = "myapp"username = "readonly"ssl_mode = "Require"
[[connections]]
name = "Local Dev"host = "localhost"port = 5432database = "myapp_dev"username = "postgres"ssl_mode = "Disable"

Query History

Query history is stored in:

  • Linux/macOS: ~/.local/share/pgrsql/history.json
  • Windows: %LOCALAPPDATA%\pgrsql\history.json

Examples

Basic SELECT

SELECT id, name, email
FROM users
WHERE created_at >'2024-01-01'ORDER BY name
LIMIT100;

JOIN Query

SELECTo.id,
u.nameas customer,
o.total,
o.created_atFROM orders o
JOIN users u ONu.id=o.user_idWHEREo.status='completed'ORDER BYo.created_atDESC;

Aggregate Query

SELECT
DATE_TRUNC('month', created_at) as month,
COUNT(*) as order_count,
SUM(total) as revenue
FROM orders
GROUP BY1ORDER BY1DESC;

Schema Inspection

-- List all tablesSELECT table_name
FROMinformation_schema.tablesWHERE table_schema ='public';
-- Describe a tableSELECT column_name, data_type, is_nullable
FROMinformation_schema.columnsWHERE table_name ='users';

Troubleshooting

Connection Issues

"Connection refused"

  • Verify PostgreSQL is running: pg_isready -h localhost -p 5432
  • Check if the host/port are correct
  • Ensure PostgreSQL is accepting connections in pg_hba.conf

"Password authentication failed"

  • Double-check your username and password
  • Verify the user exists: SELECT usename FROM pg_user;

"Database does not exist"

  • List available databases: psql -l
  • Create the database if needed: createdb mydb

Display Issues

"Garbled characters"

  • Ensure your terminal supports UTF-8
  • Try a different terminal emulator (iTerm2, Alacritty, Windows Terminal)

"Colors look wrong"

  • Set TERM=xterm-256color in your shell
  • Ensure your terminal supports 256 colors

Building from Source

Development Build

cargo build
./target/debug/pgrsql

Release Build

cargo build --release
./target/release/pgrsql

Running Tests

cargo test

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

pgrsql

A beautiful, fast TUI SQL editor for PostgreSQL written in Rust.

pgrsqlLicense

Features

  • Visual Database Browser: Navigate databases, schemas, and tables in a tree view
  • SQL Syntax Highlighting: Keywords, strings, numbers, and comments are color-coded
  • Query Results Table: Scrollable, navigable results with cell selection
  • Query History: Persistent history with search capability
  • Connection Management: Save and manage multiple PostgreSQL connections
  • Table Inspector: View table structure, columns, indexes, and DDL without writing queries
  • Export Results: Export query results to CSV, JSON, SQL INSERT, or TSV
  • Keyboard-First Design: Efficient navigation without leaving the keyboard
  • Dark Theme: Easy on the eyes for long coding sessions

Installation

Prerequisites

  • Rust (1.70 or later)
  • PostgreSQL server to connect to

From Source

git clone https://github.com/yourusername/pgrsql.git
cd pgrsql
cargo build --release

The binary will be at target/release/pgrsql.

With Cargo

cargo install --path .

Or once published:

cargo install pgrsql

Quick Start

  1. Launch pgrsql:

    pgrsql
  2. Connect to your database:

    • A connection dialog appears on startup
    • Your last-used connection is auto-populated (just enter your password)
    • Enter your PostgreSQL connection details:
      • Name: A friendly name for this connection
      • Host: Database host (e.g., localhost)
      • Port: Database port (default: 5432)
      • Database: Database name (e.g., postgres)
      • Username: Your PostgreSQL username
      • Password: Your password (must be entered each session for security)
    • Press Enter to connect
    • Use Up/Down to select saved connections, Del to delete them
  3. Write and execute queries:

    • Type your SQL in the editor pane
    • Press F5 or Ctrl+Enter to execute
    • Results appear in the bottom pane with row count and execution time
  4. Browse your schema:

    • Use the sidebar (left pane) to explore
    • Press 1, 2, or 3 to switch between Databases, Tables, and History tabs
    • Press Enter on a table to insert its name into the editor

Usage

Layout

┌─────────────────────────────────────────────────────────────┐
│ pgrsql user@localhost:5432/mydb | mydb | public │
├──────────────┬──────────────────────────────────────────────┤
│ Databases │ Query Editor │
│ Tables │ │
│ History │ SELECT * FROM users │
│ │ WHERE active = true; │
│ ▼ public │ │
│ ├ users ├──────────────────────────────────────────────┤
│ ├ orders │ Results (1/1) │
│ └ products │ id │ name │ email │ active │
│ │ 1 │ Alice │ alice@test.com │ true │
│ │ 2 │ Bob │ bob@test.com │ true │
├──────────────┴──────────────────────────────────────────────┤
│ 2 rows returned (12.34ms) │
└─────────────────────────────────────────────────────────────┘

Keyboard Shortcuts

Global

KeyAction
Ctrl+QQuit pgrsql
Ctrl+COpen connection dialog
?Toggle help overlay

Navigation

KeyAction
TabNext pane (Sidebar → Editor → Results → Sidebar)
Shift+TabPrevious pane

Note: In the Editor, Tab inserts spaces. Use Shift+Tab to go back to the Sidebar, or execute a query (F5) to move to Results.

Editor

KeyAction
F5 or Ctrl+EnterExecute query
Ctrl+LClear editor
Ctrl+UpPrevious query from history
Ctrl+DownNext query from history
Ctrl+CCopy selection
Ctrl+XCut selection
Ctrl+VPaste from clipboard
Ctrl+ASelect all
Ctrl+Left/RightMove by word
Home/EndMove to line start/end
Ctrl+Home/EndMove to document start/end

Sidebar

KeyAction
1 / 2 / 3Switch sidebar tab (Databases / Tables / History)
Up/DownNavigate items
EnterSelect/expand item
Ctrl+IOpen Table Inspector (when a table is selected)

Results

KeyAction
Arrow keysNavigate cells
Ctrl+CCopy selected cell value
Ctrl+[ / Ctrl+]Previous / Next result set
PageUp/PageDownScroll results
Home/EndJump to first/last column
Ctrl+SExport results (opens format picker)

Table Inspector

KeyAction
DToggle between Structure and DDL views
Ctrl+CCopy DDL to clipboard (in DDL view)
Up/DownScroll content
PageUp/PageDownScroll by 10 lines
Esc or qClose inspector

Table Inspector

The Table Inspector lets you view table metadata without writing SQL queries.

  1. Switch to the Tables tab (2) in the sidebar
  2. Expand a schema and select a table
  3. Press Ctrl+I to open the inspector

Structure View (default): Shows columns with their data types, nullability, primary key indicators, and default values. Also displays indexes with their columns and uniqueness.

DDL View (press D): Shows the full CREATE TABLE statement including all column definitions, constraints, and indexes. Press Ctrl+C to copy the DDL to your clipboard.

Working with Multiple Databases

  1. Press 1 to switch to the Databases tab in the sidebar
  2. Use arrow keys to select a database
  3. Press Enter to switch to that database
  4. The schema browser will refresh with the new database's contents

Working with Schemas

  1. Press 2 to switch to the Tables tab
  2. Schemas are shown with (collapsed) or (expanded)
  3. Press Enter on a schema to expand/collapse it
  4. Press Enter on a table to insert schema.table into the editor

Query History

  1. Press 3 to switch to the History tab
  2. Browse previous queries (most recent at top)
  3. Press Enter to load a query into the editor
  4. Use Ctrl+Up/Down in the editor to quickly cycle through history

Configuration

Connection Management

  • Last-used connection: Automatically pre-populated on startup with cursor on the password field
  • Saved connections: Browse with Up/Down, load with Enter, delete with Del
  • Password security: Passwords are never saved to disk; you must enter your password each session

Saved connections are stored in:

  • Linux/macOS: ~/.config/pgrsql/connections.toml
  • Windows: %APPDATA%\pgrsql\connections.toml

Format:

[[connections]]
name = "Production"host = "prod-db.example.com"port = 5432database = "myapp"username = "readonly"ssl_mode = "Require"
[[connections]]
name = "Local Dev"host = "localhost"port = 5432database = "myapp_dev"username = "postgres"ssl_mode = "Disable"

Query History

Query history is stored in:

  • Linux/macOS: ~/.local/share/pgrsql/history.json
  • Windows: %LOCALAPPDATA%\pgrsql\history.json

Examples

Basic SELECT

SELECT id, name, email
FROM users
WHERE created_at >'2024-01-01'ORDER BY name
LIMIT100;

JOIN Query

SELECTo.id,
u.nameas customer,
o.total,
o.created_atFROM orders o
JOIN users u ONu.id=o.user_idWHEREo.status='completed'ORDER BYo.created_atDESC;

Aggregate Query

SELECT
DATE_TRUNC('month', created_at) as month,
COUNT(*) as order_count,
SUM(total) as revenue
FROM orders
GROUP BY1ORDER BY1DESC;

Schema Inspection

-- List all tablesSELECT table_name
FROMinformation_schema.tablesWHERE table_schema ='public';
-- Describe a tableSELECT column_name, data_type, is_nullable
FROMinformation_schema.columnsWHERE table_name ='users';

Troubleshooting

Connection Issues

"Connection refused"

  • Verify PostgreSQL is running: pg_isready -h localhost -p 5432
  • Check if the host/port are correct
  • Ensure PostgreSQL is accepting connections in pg_hba.conf

"Password authentication failed"

  • Double-check your username and password
  • Verify the user exists: SELECT usename FROM pg_user;

"Database does not exist"

  • List available databases: psql -l
  • Create the database if needed: createdb mydb

Display Issues

"Garbled characters"

  • Ensure your terminal supports UTF-8
  • Try a different terminal emulator (iTerm2, Alacritty, Windows Terminal)

"Colors look wrong"

  • Set TERM=xterm-256color in your shell
  • Ensure your terminal supports 256 colors

Building from Source

Development Build

cargo build
./target/debug/pgrsql

Release Build

cargo build --release
./target/release/pgrsql

Running Tests

cargo test

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

pgrsql

A beautiful, fast TUI SQL editor for PostgreSQL written in Rust.

pgrsqlLicense

Features

  • Visual Database Browser: Navigate databases, schemas, and tables in a tree view
  • SQL Syntax Highlighting: Keywords, strings, numbers, and comments are color-coded
  • Query Results Table: Scrollable, navigable results with cell selection
  • Query History: Persistent history with search capability
  • Connection Management: Save and manage multiple PostgreSQL connections
  • Table Inspector: View table structure, columns, indexes, and DDL without writing queries
  • Export Results: Export query results to CSV, JSON, SQL INSERT, or TSV
  • Keyboard-First Design: Efficient navigation without leaving the keyboard
  • Dark Theme: Easy on the eyes for long coding sessions

Installation

Prerequisites

  • Rust (1.70 or later)
  • PostgreSQL server to connect to

From Source

git clone https://github.com/yourusername/pgrsql.git
cd pgrsql
cargo build --release

The binary will be at target/release/pgrsql.

With Cargo

cargo install --path .

Or once published:

cargo install pgrsql

Quick Start

  1. Launch pgrsql:

    pgrsql
  2. Connect to your database:

    • A connection dialog appears on startup
    • Your last-used connection is auto-populated (just enter your password)
    • Enter your PostgreSQL connection details:
      • Name: A friendly name for this connection
      • Host: Database host (e.g., localhost)
      • Port: Database port (default: 5432)
      • Database: Database name (e.g., postgres)
      • Username: Your PostgreSQL username
      • Password: Your password (must be entered each session for security)
    • Press Enter to connect
    • Use Up/Down to select saved connections, Del to delete them
  3. Write and execute queries:

    • Type your SQL in the editor pane
    • Press F5 or Ctrl+Enter to execute
    • Results appear in the bottom pane with row count and execution time
  4. Browse your schema:

    • Use the sidebar (left pane) to explore
    • Press 1, 2, or 3 to switch between Databases, Tables, and History tabs
    • Press Enter on a table to insert its name into the editor

Usage

Layout

┌─────────────────────────────────────────────────────────────┐
│ pgrsql user@localhost:5432/mydb | mydb | public │
├──────────────┬──────────────────────────────────────────────┤
│ Databases │ Query Editor │
│ Tables │ │
│ History │ SELECT * FROM users │
│ │ WHERE active = true; │
│ ▼ public │ │
│ ├ users ├──────────────────────────────────────────────┤
│ ├ orders │ Results (1/1) │
│ └ products │ id │ name │ email │ active │
│ │ 1 │ Alice │ alice@test.com │ true │
│ │ 2 │ Bob │ bob@test.com │ true │
├──────────────┴──────────────────────────────────────────────┤
│ 2 rows returned (12.34ms) │
└─────────────────────────────────────────────────────────────┘

Keyboard Shortcuts

Global

KeyAction
Ctrl+QQuit pgrsql
Ctrl+COpen connection dialog
?Toggle help overlay

Navigation

KeyAction
TabNext pane (Sidebar → Editor → Results → Sidebar)
Shift+TabPrevious pane

Note: In the Editor, Tab inserts spaces. Use Shift+Tab to go back to the Sidebar, or execute a query (F5) to move to Results.

Editor

KeyAction
F5 or Ctrl+EnterExecute query
Ctrl+LClear editor
Ctrl+UpPrevious query from history
Ctrl+DownNext query from history
Ctrl+CCopy selection
Ctrl+XCut selection
Ctrl+VPaste from clipboard
Ctrl+ASelect all
Ctrl+Left/RightMove by word
Home/EndMove to line start/end
Ctrl+Home/EndMove to document start/end

Sidebar

KeyAction
1 / 2 / 3Switch sidebar tab (Databases / Tables / History)
Up/DownNavigate items
EnterSelect/expand item
Ctrl+IOpen Table Inspector (when a table is selected)

Results

KeyAction
Arrow keysNavigate cells
Ctrl+CCopy selected cell value
Ctrl+[ / Ctrl+]Previous / Next result set
PageUp/PageDownScroll results
Home/EndJump to first/last column
Ctrl+SExport results (opens format picker)

Table Inspector

KeyAction
DToggle between Structure and DDL views
Ctrl+CCopy DDL to clipboard (in DDL view)
Up/DownScroll content
PageUp/PageDownScroll by 10 lines
Esc or qClose inspector

Table Inspector

The Table Inspector lets you view table metadata without writing SQL queries.

  1. Switch to the Tables tab (2) in the sidebar
  2. Expand a schema and select a table
  3. Press Ctrl+I to open the inspector

Structure View (default): Shows columns with their data types, nullability, primary key indicators, and default values. Also displays indexes with their columns and uniqueness.

DDL View (press D): Shows the full CREATE TABLE statement including all column definitions, constraints, and indexes. Press Ctrl+C to copy the DDL to your clipboard.

Working with Multiple Databases

  1. Press 1 to switch to the Databases tab in the sidebar
  2. Use arrow keys to select a database
  3. Press Enter to switch to that database
  4. The schema browser will refresh with the new database's contents

Working with Schemas

  1. Press 2 to switch to the Tables tab
  2. Schemas are shown with (collapsed) or (expanded)
  3. Press Enter on a schema to expand/collapse it
  4. Press Enter on a table to insert schema.table into the editor

Query History

  1. Press 3 to switch to the History tab
  2. Browse previous queries (most recent at top)
  3. Press Enter to load a query into the editor
  4. Use Ctrl+Up/Down in the editor to quickly cycle through history

Configuration

Connection Management

  • Last-used connection: Automatically pre-populated on startup with cursor on the password field
  • Saved connections: Browse with Up/Down, load with Enter, delete with Del
  • Password security: Passwords are never saved to disk; you must enter your password each session

Saved connections are stored in:

  • Linux/macOS: ~/.config/pgrsql/connections.toml
  • Windows: %APPDATA%\pgrsql\connections.toml

Format:

[[connections]]
name = "Production"host = "prod-db.example.com"port = 5432database = "myapp"username = "readonly"ssl_mode = "Require"
[[connections]]
name = "Local Dev"host = "localhost"port = 5432database = "myapp_dev"username = "postgres"ssl_mode = "Disable"

Query History

Query history is stored in:

  • Linux/macOS: ~/.local/share/pgrsql/history.json
  • Windows: %LOCALAPPDATA%\pgrsql\history.json

Examples

Basic SELECT

SELECT id, name, email
FROM users
WHERE created_at >'2024-01-01'ORDER BY name
LIMIT100;

JOIN Query

SELECTo.id,
u.nameas customer,
o.total,
o.created_atFROM orders o
JOIN users u ONu.id=o.user_idWHEREo.status='completed'ORDER BYo.created_atDESC;

Aggregate Query

SELECT
DATE_TRUNC('month', created_at) as month,
COUNT(*) as order_count,
SUM(total) as revenue
FROM orders
GROUP BY1ORDER BY1DESC;

Schema Inspection

-- List all tablesSELECT table_name
FROMinformation_schema.tablesWHERE table_schema ='public';
-- Describe a tableSELECT column_name, data_type, is_nullable
FROMinformation_schema.columnsWHERE table_name ='users';

Troubleshooting

Connection Issues

"Connection refused"

  • Verify PostgreSQL is running: pg_isready -h localhost -p 5432
  • Check if the host/port are correct
  • Ensure PostgreSQL is accepting connections in pg_hba.conf

"Password authentication failed"

  • Double-check your username and password
  • Verify the user exists: SELECT usename FROM pg_user;

"Database does not exist"

  • List available databases: psql -l
  • Create the database if needed: createdb mydb

Display Issues

"Garbled characters"

  • Ensure your terminal supports UTF-8
  • Try a different terminal emulator (iTerm2, Alacritty, Windows Terminal)

"Colors look wrong"

  • Set TERM=xterm-256color in your shell
  • Ensure your terminal supports 256 colors

Building from Source

Development Build

cargo build
./target/debug/pgrsql

Release Build

cargo build --release
./target/release/pgrsql

Running Tests

cargo test

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

pgrsql

A beautiful, fast TUI SQL editor for PostgreSQL written in Rust.

pgrsqlLicense

Features

  • Visual Database Browser: Navigate databases, schemas, and tables in a tree view
  • SQL Syntax Highlighting: Keywords, strings, numbers, and comments are color-coded
  • Query Results Table: Scrollable, navigable results with cell selection
  • Query History: Persistent history with search capability
  • Connection Management: Save and manage multiple PostgreSQL connections
  • Table Inspector: View table structure, columns, indexes, and DDL without writing queries
  • Export Results: Export query results to CSV, JSON, SQL INSERT, or TSV
  • Keyboard-First Design: Efficient navigation without leaving the keyboard
  • Dark Theme: Easy on the eyes for long coding sessions

Installation

Prerequisites

  • Rust (1.70 or later)
  • PostgreSQL server to connect to

From Source

git clone https://github.com/yourusername/pgrsql.git
cd pgrsql
cargo build --release

The binary will be at target/release/pgrsql.

With Cargo

cargo install --path .

Or once published:

cargo install pgrsql

Quick Start

  1. Launch pgrsql:

    pgrsql
  2. Connect to your database:

    • A connection dialog appears on startup
    • Your last-used connection is auto-populated (just enter your password)
    • Enter your PostgreSQL connection details:
      • Name: A friendly name for this connection
      • Host: Database host (e.g., localhost)
      • Port: Database port (default: 5432)
      • Database: Database name (e.g., postgres)
      • Username: Your PostgreSQL username
      • Password: Your password (must be entered each session for security)
    • Press Enter to connect
    • Use Up/Down to select saved connections, Del to delete them
  3. Write and execute queries:

    • Type your SQL in the editor pane
    • Press F5 or Ctrl+Enter to execute
    • Results appear in the bottom pane with row count and execution time
  4. Browse your schema:

    • Use the sidebar (left pane) to explore
    • Press 1, 2, or 3 to switch between Databases, Tables, and History tabs
    • Press Enter on a table to insert its name into the editor

Usage

Layout

┌─────────────────────────────────────────────────────────────┐
│ pgrsql user@localhost:5432/mydb | mydb | public │
├──────────────┬──────────────────────────────────────────────┤
│ Databases │ Query Editor │
│ Tables │ │
│ History │ SELECT * FROM users │
│ │ WHERE active = true; │
│ ▼ public │ │
│ ├ users ├──────────────────────────────────────────────┤
│ ├ orders │ Results (1/1) │
│ └ products │ id │ name │ email │ active │
│ │ 1 │ Alice │ alice@test.com │ true │
│ │ 2 │ Bob │ bob@test.com │ true │
├──────────────┴──────────────────────────────────────────────┤
│ 2 rows returned (12.34ms) │
└─────────────────────────────────────────────────────────────┘

Keyboard Shortcuts

Global

KeyAction
Ctrl+QQuit pgrsql
Ctrl+COpen connection dialog
?Toggle help overlay

Navigation

KeyAction
TabNext pane (Sidebar → Editor → Results → Sidebar)
Shift+TabPrevious pane

Note: In the Editor, Tab inserts spaces. Use Shift+Tab to go back to the Sidebar, or execute a query (F5) to move to Results.

Editor

KeyAction
F5 or Ctrl+EnterExecute query
Ctrl+LClear editor
Ctrl+UpPrevious query from history
Ctrl+DownNext query from history
Ctrl+CCopy selection
Ctrl+XCut selection
Ctrl+VPaste from clipboard
Ctrl+ASelect all
Ctrl+Left/RightMove by word
Home/EndMove to line start/end
Ctrl+Home/EndMove to document start/end

Sidebar

KeyAction
1 / 2 / 3Switch sidebar tab (Databases / Tables / History)
Up/DownNavigate items
EnterSelect/expand item
Ctrl+IOpen Table Inspector (when a table is selected)

Results

KeyAction
Arrow keysNavigate cells
Ctrl+CCopy selected cell value
Ctrl+[ / Ctrl+]Previous / Next result set
PageUp/PageDownScroll results
Home/EndJump to first/last column
Ctrl+SExport results (opens format picker)

Table Inspector

KeyAction
DToggle between Structure and DDL views
Ctrl+CCopy DDL to clipboard (in DDL view)
Up/DownScroll content
PageUp/PageDownScroll by 10 lines
Esc or qClose inspector

Table Inspector

The Table Inspector lets you view table metadata without writing SQL queries.

  1. Switch to the Tables tab (2) in the sidebar
  2. Expand a schema and select a table
  3. Press Ctrl+I to open the inspector

Structure View (default): Shows columns with their data types, nullability, primary key indicators, and default values. Also displays indexes with their columns and uniqueness.

DDL View (press D): Shows the full CREATE TABLE statement including all column definitions, constraints, and indexes. Press Ctrl+C to copy the DDL to your clipboard.

Working with Multiple Databases

  1. Press 1 to switch to the Databases tab in the sidebar
  2. Use arrow keys to select a database
  3. Press Enter to switch to that database
  4. The schema browser will refresh with the new database's contents

Working with Schemas

  1. Press 2 to switch to the Tables tab
  2. Schemas are shown with (collapsed) or (expanded)
  3. Press Enter on a schema to expand/collapse it
  4. Press Enter on a table to insert schema.table into the editor

Query History

  1. Press 3 to switch to the History tab
  2. Browse previous queries (most recent at top)
  3. Press Enter to load a query into the editor
  4. Use Ctrl+Up/Down in the editor to quickly cycle through history

Configuration

Connection Management

  • Last-used connection: Automatically pre-populated on startup with cursor on the password field
  • Saved connections: Browse with Up/Down, load with Enter, delete with Del
  • Password security: Passwords are never saved to disk; you must enter your password each session

Saved connections are stored in:

  • Linux/macOS: ~/.config/pgrsql/connections.toml
  • Windows: %APPDATA%\pgrsql\connections.toml

Format:

[[connections]]
name = "Production"host = "prod-db.example.com"port = 5432database = "myapp"username = "readonly"ssl_mode = "Require"
[[connections]]
name = "Local Dev"host = "localhost"port = 5432database = "myapp_dev"username = "postgres"ssl_mode = "Disable"

Query History

Query history is stored in:

  • Linux/macOS: ~/.local/share/pgrsql/history.json
  • Windows: %LOCALAPPDATA%\pgrsql\history.json

Examples

Basic SELECT

SELECT id, name, email
FROM users
WHERE created_at >'2024-01-01'ORDER BY name
LIMIT100;

JOIN Query

SELECTo.id,
u.nameas customer,
o.total,
o.created_atFROM orders o
JOIN users u ONu.id=o.user_idWHEREo.status='completed'ORDER BYo.created_atDESC;

Aggregate Query

SELECT
DATE_TRUNC('month', created_at) as month,
COUNT(*) as order_count,
SUM(total) as revenue
FROM orders
GROUP BY1ORDER BY1DESC;

Schema Inspection

-- List all tablesSELECT table_name
FROMinformation_schema.tablesWHERE table_schema ='public';
-- Describe a tableSELECT column_name, data_type, is_nullable
FROMinformation_schema.columnsWHERE table_name ='users';

Troubleshooting

Connection Issues

"Connection refused"

  • Verify PostgreSQL is running: pg_isready -h localhost -p 5432
  • Check if the host/port are correct
  • Ensure PostgreSQL is accepting connections in pg_hba.conf

"Password authentication failed"

  • Double-check your username and password
  • Verify the user exists: SELECT usename FROM pg_user;

"Database does not exist"

  • List available databases: psql -l
  • Create the database if needed: createdb mydb

Display Issues

"Garbled characters"

  • Ensure your terminal supports UTF-8
  • Try a different terminal emulator (iTerm2, Alacritty, Windows Terminal)

"Colors look wrong"

  • Set TERM=xterm-256color in your shell
  • Ensure your terminal supports 256 colors

Building from Source

Development Build

cargo build
./target/debug/pgrsql

Release Build

cargo build --release
./target/release/pgrsql

Running Tests

cargo test

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

pgrsql

A beautiful, fast TUI SQL editor for PostgreSQL written in Rust.

pgrsqlLicense

Features

  • Visual Database Browser: Navigate databases, schemas, and tables in a tree view
  • SQL Syntax Highlighting: Keywords, strings, numbers, and comments are color-coded
  • Query Results Table: Scrollable, navigable results with cell selection
  • Query History: Persistent history with search capability
  • Connection Management: Save and manage multiple PostgreSQL connections
  • Table Inspector: View table structure, columns, indexes, and DDL without writing queries
  • Export Results: Export query results to CSV, JSON, SQL INSERT, or TSV
  • Keyboard-First Design: Efficient navigation without leaving the keyboard
  • Dark Theme: Easy on the eyes for long coding sessions

Installation

Prerequisites

  • Rust (1.70 or later)
  • PostgreSQL server to connect to

From Source

git clone https://github.com/yourusername/pgrsql.git
cd pgrsql
cargo build --release

The binary will be at target/release/pgrsql.

With Cargo

cargo install --path .

Or once published:

cargo install pgrsql

Quick Start

  1. Launch pgrsql:

    pgrsql
  2. Connect to your database:

    • A connection dialog appears on startup
    • Your last-used connection is auto-populated (just enter your password)
    • Enter your PostgreSQL connection details:
      • Name: A friendly name for this connection
      • Host: Database host (e.g., localhost)
      • Port: Database port (default: 5432)
      • Database: Database name (e.g., postgres)
      • Username: Your PostgreSQL username
      • Password: Your password (must be entered each session for security)
    • Press Enter to connect
    • Use Up/Down to select saved connections, Del to delete them
  3. Write and execute queries:

    • Type your SQL in the editor pane
    • Press F5 or Ctrl+Enter to execute
    • Results appear in the bottom pane with row count and execution time
  4. Browse your schema:

    • Use the sidebar (left pane) to explore
    • Press 1, 2, or 3 to switch between Databases, Tables, and History tabs
    • Press Enter on a table to insert its name into the editor

Usage

Layout

┌─────────────────────────────────────────────────────────────┐
│ pgrsql user@localhost:5432/mydb | mydb | public │
├──────────────┬──────────────────────────────────────────────┤
│ Databases │ Query Editor │
│ Tables │ │
│ History │ SELECT * FROM users │
│ │ WHERE active = true; │
│ ▼ public │ │
│ ├ users ├──────────────────────────────────────────────┤
│ ├ orders │ Results (1/1) │
│ └ products │ id │ name │ email │ active │
│ │ 1 │ Alice │ alice@test.com │ true │
│ │ 2 │ Bob │ bob@test.com │ true │
├──────────────┴──────────────────────────────────────────────┤
│ 2 rows returned (12.34ms) │
└─────────────────────────────────────────────────────────────┘

Keyboard Shortcuts

Global

KeyAction
Ctrl+QQuit pgrsql
Ctrl+COpen connection dialog
?Toggle help overlay

Navigation

KeyAction
TabNext pane (Sidebar → Editor → Results → Sidebar)
Shift+TabPrevious pane

Note: In the Editor, Tab inserts spaces. Use Shift+Tab to go back to the Sidebar, or execute a query (F5) to move to Results.

Editor

KeyAction
F5 or Ctrl+EnterExecute query
Ctrl+LClear editor
Ctrl+UpPrevious query from history
Ctrl+DownNext query from history
Ctrl+CCopy selection
Ctrl+XCut selection
Ctrl+VPaste from clipboard
Ctrl+ASelect all
Ctrl+Left/RightMove by word
Home/EndMove to line start/end
Ctrl+Home/EndMove to document start/end

Sidebar

KeyAction
1 / 2 / 3Switch sidebar tab (Databases / Tables / History)
Up/DownNavigate items
EnterSelect/expand item
Ctrl+IOpen Table Inspector (when a table is selected)

Results

KeyAction
Arrow keysNavigate cells
Ctrl+CCopy selected cell value
Ctrl+[ / Ctrl+]Previous / Next result set
PageUp/PageDownScroll results
Home/EndJump to first/last column
Ctrl+SExport results (opens format picker)

Table Inspector

KeyAction
DToggle between Structure and DDL views
Ctrl+CCopy DDL to clipboard (in DDL view)
Up/DownScroll content
PageUp/PageDownScroll by 10 lines
Esc or qClose inspector

Table Inspector

The Table Inspector lets you view table metadata without writing SQL queries.

  1. Switch to the Tables tab (2) in the sidebar
  2. Expand a schema and select a table
  3. Press Ctrl+I to open the inspector

Structure View (default): Shows columns with their data types, nullability, primary key indicators, and default values. Also displays indexes with their columns and uniqueness.

DDL View (press D): Shows the full CREATE TABLE statement including all column definitions, constraints, and indexes. Press Ctrl+C to copy the DDL to your clipboard.

Working with Multiple Databases

  1. Press 1 to switch to the Databases tab in the sidebar
  2. Use arrow keys to select a database
  3. Press Enter to switch to that database
  4. The schema browser will refresh with the new database's contents

Working with Schemas

  1. Press 2 to switch to the Tables tab
  2. Schemas are shown with (collapsed) or (expanded)
  3. Press Enter on a schema to expand/collapse it
  4. Press Enter on a table to insert schema.table into the editor

Query History

  1. Press 3 to switch to the History tab
  2. Browse previous queries (most recent at top)
  3. Press Enter to load a query into the editor
  4. Use Ctrl+Up/Down in the editor to quickly cycle through history

Configuration

Connection Management

  • Last-used connection: Automatically pre-populated on startup with cursor on the password field
  • Saved connections: Browse with Up/Down, load with Enter, delete with Del
  • Password security: Passwords are never saved to disk; you must enter your password each session

Saved connections are stored in:

  • Linux/macOS: ~/.config/pgrsql/connections.toml
  • Windows: %APPDATA%\pgrsql\connections.toml

Format:

[[connections]]
name = "Production"host = "prod-db.example.com"port = 5432database = "myapp"username = "readonly"ssl_mode = "Require"
[[connections]]
name = "Local Dev"host = "localhost"port = 5432database = "myapp_dev"username = "postgres"ssl_mode = "Disable"

Query History

Query history is stored in:

  • Linux/macOS: ~/.local/share/pgrsql/history.json
  • Windows: %LOCALAPPDATA%\pgrsql\history.json

Examples

Basic SELECT

SELECT id, name, email
FROM users
WHERE created_at >'2024-01-01'ORDER BY name
LIMIT100;

JOIN Query

SELECTo.id,
u.nameas customer,
o.total,
o.created_atFROM orders o
JOIN users u ONu.id=o.user_idWHEREo.status='completed'ORDER BYo.created_atDESC;

Aggregate Query

SELECT
DATE_TRUNC('month', created_at) as month,
COUNT(*) as order_count,
SUM(total) as revenue
FROM orders
GROUP BY1ORDER BY1DESC;

Schema Inspection

-- List all tablesSELECT table_name
FROMinformation_schema.tablesWHERE table_schema ='public';
-- Describe a tableSELECT column_name, data_type, is_nullable
FROMinformation_schema.columnsWHERE table_name ='users';

Troubleshooting

Connection Issues

"Connection refused"

  • Verify PostgreSQL is running: pg_isready -h localhost -p 5432
  • Check if the host/port are correct
  • Ensure PostgreSQL is accepting connections in pg_hba.conf

"Password authentication failed"

  • Double-check your username and password
  • Verify the user exists: SELECT usename FROM pg_user;

"Database does not exist"

  • List available databases: psql -l
  • Create the database if needed: createdb mydb

Display Issues

"Garbled characters"

  • Ensure your terminal supports UTF-8
  • Try a different terminal emulator (iTerm2, Alacritty, Windows Terminal)

"Colors look wrong"

  • Set TERM=xterm-256color in your shell
  • Ensure your terminal supports 256 colors

Building from Source

Development Build

cargo build
./target/debug/pgrsql

Release Build

cargo build --release
./target/release/pgrsql

Running Tests

cargo test

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

pgrsql

A beautiful, fast TUI SQL editor for PostgreSQL written in Rust.

pgrsqlLicense

Features

  • Visual Database Browser: Navigate databases, schemas, and tables in a tree view
  • SQL Syntax Highlighting: Keywords, strings, numbers, and comments are color-coded
  • Query Results Table: Scrollable, navigable results with cell selection
  • Query History: Persistent history with search capability
  • Connection Management: Save and manage multiple PostgreSQL connections
  • Table Inspector: View table structure, columns, indexes, and DDL without writing queries
  • Export Results: Export query results to CSV, JSON, SQL INSERT, or TSV
  • Keyboard-First Design: Efficient navigation without leaving the keyboard
  • Dark Theme: Easy on the eyes for long coding sessions

Installation

Prerequisites

  • Rust (1.70 or later)
  • PostgreSQL server to connect to

From Source

git clone https://github.com/yourusername/pgrsql.git
cd pgrsql
cargo build --release

The binary will be at target/release/pgrsql.

With Cargo

cargo install --path .

Or once published:

cargo install pgrsql

Quick Start

  1. Launch pgrsql:

    pgrsql
  2. Connect to your database:

    • A connection dialog appears on startup
    • Your last-used connection is auto-populated (just enter your password)
    • Enter your PostgreSQL connection details:
      • Name: A friendly name for this connection
      • Host: Database host (e.g., localhost)
      • Port: Database port (default: 5432)
      • Database: Database name (e.g., postgres)
      • Username: Your PostgreSQL username
      • Password: Your password (must be entered each session for security)
    • Press Enter to connect
    • Use Up/Down to select saved connections, Del to delete them
  3. Write and execute queries:

    • Type your SQL in the editor pane
    • Press F5 or Ctrl+Enter to execute
    • Results appear in the bottom pane with row count and execution time
  4. Browse your schema:

    • Use the sidebar (left pane) to explore
    • Press 1, 2, or 3 to switch between Databases, Tables, and History tabs
    • Press Enter on a table to insert its name into the editor

Usage

Layout

┌─────────────────────────────────────────────────────────────┐
│ pgrsql user@localhost:5432/mydb | mydb | public │
├──────────────┬──────────────────────────────────────────────┤
│ Databases │ Query Editor │
│ Tables │ │
│ History │ SELECT * FROM users │
│ │ WHERE active = true; │
│ ▼ public │ │
│ ├ users ├──────────────────────────────────────────────┤
│ ├ orders │ Results (1/1) │
│ └ products │ id │ name │ email │ active │
│ │ 1 │ Alice │ alice@test.com │ true │
│ │ 2 │ Bob │ bob@test.com │ true │
├──────────────┴──────────────────────────────────────────────┤
│ 2 rows returned (12.34ms) │
└─────────────────────────────────────────────────────────────┘

Keyboard Shortcuts

Global

KeyAction
Ctrl+QQuit pgrsql
Ctrl+COpen connection dialog
?Toggle help overlay

Navigation

KeyAction
TabNext pane (Sidebar → Editor → Results → Sidebar)
Shift+TabPrevious pane

Note: In the Editor, Tab inserts spaces. Use Shift+Tab to go back to the Sidebar, or execute a query (F5) to move to Results.

Editor

KeyAction
F5 or Ctrl+EnterExecute query
Ctrl+LClear editor
Ctrl+UpPrevious query from history
Ctrl+DownNext query from history
Ctrl+CCopy selection
Ctrl+XCut selection
Ctrl+VPaste from clipboard
Ctrl+ASelect all
Ctrl+Left/RightMove by word
Home/EndMove to line start/end
Ctrl+Home/EndMove to document start/end

Sidebar

KeyAction
1 / 2 / 3Switch sidebar tab (Databases / Tables / History)
Up/DownNavigate items
EnterSelect/expand item
Ctrl+IOpen Table Inspector (when a table is selected)

Results

KeyAction
Arrow keysNavigate cells
Ctrl+CCopy selected cell value
Ctrl+[ / Ctrl+]Previous / Next result set
PageUp/PageDownScroll results
Home/EndJump to first/last column
Ctrl+SExport results (opens format picker)

Table Inspector

KeyAction
DToggle between Structure and DDL views
Ctrl+CCopy DDL to clipboard (in DDL view)
Up/DownScroll content
PageUp/PageDownScroll by 10 lines
Esc or qClose inspector

Table Inspector

The Table Inspector lets you view table metadata without writing SQL queries.

  1. Switch to the Tables tab (2) in the sidebar
  2. Expand a schema and select a table
  3. Press Ctrl+I to open the inspector

Structure View (default): Shows columns with their data types, nullability, primary key indicators, and default values. Also displays indexes with their columns and uniqueness.

DDL View (press D): Shows the full CREATE TABLE statement including all column definitions, constraints, and indexes. Press Ctrl+C to copy the DDL to your clipboard.

Working with Multiple Databases

  1. Press 1 to switch to the Databases tab in the sidebar
  2. Use arrow keys to select a database
  3. Press Enter to switch to that database
  4. The schema browser will refresh with the new database's contents

Working with Schemas

  1. Press 2 to switch to the Tables tab
  2. Schemas are shown with (collapsed) or (expanded)
  3. Press Enter on a schema to expand/collapse it
  4. Press Enter on a table to insert schema.table into the editor

Query History

  1. Press 3 to switch to the History tab
  2. Browse previous queries (most recent at top)
  3. Press Enter to load a query into the editor
  4. Use Ctrl+Up/Down in the editor to quickly cycle through history

Configuration

Connection Management

  • Last-used connection: Automatically pre-populated on startup with cursor on the password field
  • Saved connections: Browse with Up/Down, load with Enter, delete with Del
  • Password security: Passwords are never saved to disk; you must enter your password each session

Saved connections are stored in:

  • Linux/macOS: ~/.config/pgrsql/connections.toml
  • Windows: %APPDATA%\pgrsql\connections.toml

Format:

[[connections]]
name = "Production"host = "prod-db.example.com"port = 5432database = "myapp"username = "readonly"ssl_mode = "Require"
[[connections]]
name = "Local Dev"host = "localhost"port = 5432database = "myapp_dev"username = "postgres"ssl_mode = "Disable"

Query History

Query history is stored in:

  • Linux/macOS: ~/.local/share/pgrsql/history.json
  • Windows: %LOCALAPPDATA%\pgrsql\history.json

Examples

Basic SELECT

SELECT id, name, email
FROM users
WHERE created_at >'2024-01-01'ORDER BY name
LIMIT100;

JOIN Query

SELECTo.id,
u.nameas customer,
o.total,
o.created_atFROM orders o
JOIN users u ONu.id=o.user_idWHEREo.status='completed'ORDER BYo.created_atDESC;

Aggregate Query

SELECT
DATE_TRUNC('month', created_at) as month,
COUNT(*) as order_count,
SUM(total) as revenue
FROM orders
GROUP BY1ORDER BY1DESC;

Schema Inspection

-- List all tablesSELECT table_name
FROMinformation_schema.tablesWHERE table_schema ='public';
-- Describe a tableSELECT column_name, data_type, is_nullable
FROMinformation_schema.columnsWHERE table_name ='users';

Troubleshooting

Connection Issues

"Connection refused"

  • Verify PostgreSQL is running: pg_isready -h localhost -p 5432
  • Check if the host/port are correct
  • Ensure PostgreSQL is accepting connections in pg_hba.conf

"Password authentication failed"

  • Double-check your username and password
  • Verify the user exists: SELECT usename FROM pg_user;

"Database does not exist"

  • List available databases: psql -l
  • Create the database if needed: createdb mydb

Display Issues

"Garbled characters"

  • Ensure your terminal supports UTF-8
  • Try a different terminal emulator (iTerm2, Alacritty, Windows Terminal)

"Colors look wrong"

  • Set TERM=xterm-256color in your shell
  • Ensure your terminal supports 256 colors

Building from Source

Development Build

cargo build
./target/debug/pgrsql

Release Build

cargo build --release
./target/release/pgrsql

Running Tests

cargo test

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

pgrsql

A beautiful, fast TUI SQL editor for PostgreSQL written in Rust.

pgrsqlLicense

Features

  • Visual Database Browser: Navigate databases, schemas, and tables in a tree view
  • SQL Syntax Highlighting: Keywords, strings, numbers, and comments are color-coded
  • Query Results Table: Scrollable, navigable results with cell selection
  • Query History: Persistent history with search capability
  • Connection Management: Save and manage multiple PostgreSQL connections
  • Table Inspector: View table structure, columns, indexes, and DDL without writing queries
  • Export Results: Export query results to CSV, JSON, SQL INSERT, or TSV
  • Keyboard-First Design: Efficient navigation without leaving the keyboard
  • Dark Theme: Easy on the eyes for long coding sessions

Installation

Prerequisites

  • Rust (1.70 or later)
  • PostgreSQL server to connect to

From Source

git clone https://github.com/yourusername/pgrsql.git
cd pgrsql
cargo build --release

The binary will be at target/release/pgrsql.

With Cargo

cargo install --path .

Or once published:

cargo install pgrsql

Quick Start

  1. Launch pgrsql:

    pgrsql
  2. Connect to your database:

    • A connection dialog appears on startup
    • Your last-used connection is auto-populated (just enter your password)
    • Enter your PostgreSQL connection details:
      • Name: A friendly name for this connection
      • Host: Database host (e.g., localhost)
      • Port: Database port (default: 5432)
      • Database: Database name (e.g., postgres)
      • Username: Your PostgreSQL username
      • Password: Your password (must be entered each session for security)
    • Press Enter to connect
    • Use Up/Down to select saved connections, Del to delete them
  3. Write and execute queries:

    • Type your SQL in the editor pane
    • Press F5 or Ctrl+Enter to execute
    • Results appear in the bottom pane with row count and execution time
  4. Browse your schema:

    • Use the sidebar (left pane) to explore
    • Press 1, 2, or 3 to switch between Databases, Tables, and History tabs
    • Press Enter on a table to insert its name into the editor

Usage

Layout

┌─────────────────────────────────────────────────────────────┐
│ pgrsql user@localhost:5432/mydb | mydb | public │
├──────────────┬──────────────────────────────────────────────┤
│ Databases │ Query Editor │
│ Tables │ │
│ History │ SELECT * FROM users │
│ │ WHERE active = true; │
│ ▼ public │ │
│ ├ users ├──────────────────────────────────────────────┤
│ ├ orders │ Results (1/1) │
│ └ products │ id │ name │ email │ active │
│ │ 1 │ Alice │ alice@test.com │ true │
│ │ 2 │ Bob │ bob@test.com │ true │
├──────────────┴──────────────────────────────────────────────┤
│ 2 rows returned (12.34ms) │
└─────────────────────────────────────────────────────────────┘

Keyboard Shortcuts

Global

KeyAction
Ctrl+QQuit pgrsql
Ctrl+COpen connection dialog
?Toggle help overlay

Navigation

KeyAction
TabNext pane (Sidebar → Editor → Results → Sidebar)
Shift+TabPrevious pane

Note: In the Editor, Tab inserts spaces. Use Shift+Tab to go back to the Sidebar, or execute a query (F5) to move to Results.

Editor

KeyAction
F5 or Ctrl+EnterExecute query
Ctrl+LClear editor
Ctrl+UpPrevious query from history
Ctrl+DownNext query from history
Ctrl+CCopy selection
Ctrl+XCut selection
Ctrl+VPaste from clipboard
Ctrl+ASelect all
Ctrl+Left/RightMove by word
Home/EndMove to line start/end
Ctrl+Home/EndMove to document start/end

Sidebar

KeyAction
1 / 2 / 3Switch sidebar tab (Databases / Tables / History)
Up/DownNavigate items
EnterSelect/expand item
Ctrl+IOpen Table Inspector (when a table is selected)

Results

KeyAction
Arrow keysNavigate cells
Ctrl+CCopy selected cell value
Ctrl+[ / Ctrl+]Previous / Next result set
PageUp/PageDownScroll results
Home/EndJump to first/last column
Ctrl+SExport results (opens format picker)

Table Inspector

KeyAction
DToggle between Structure and DDL views
Ctrl+CCopy DDL to clipboard (in DDL view)
Up/DownScroll content
PageUp/PageDownScroll by 10 lines
Esc or qClose inspector

Table Inspector

The Table Inspector lets you view table metadata without writing SQL queries.

  1. Switch to the Tables tab (2) in the sidebar
  2. Expand a schema and select a table
  3. Press Ctrl+I to open the inspector

Structure View (default): Shows columns with their data types, nullability, primary key indicators, and default values. Also displays indexes with their columns and uniqueness.

DDL View (press D): Shows the full CREATE TABLE statement including all column definitions, constraints, and indexes. Press Ctrl+C to copy the DDL to your clipboard.

Working with Multiple Databases

  1. Press 1 to switch to the Databases tab in the sidebar
  2. Use arrow keys to select a database
  3. Press Enter to switch to that database
  4. The schema browser will refresh with the new database's contents

Working with Schemas

  1. Press 2 to switch to the Tables tab
  2. Schemas are shown with (collapsed) or (expanded)
  3. Press Enter on a schema to expand/collapse it
  4. Press Enter on a table to insert schema.table into the editor

Query History

  1. Press 3 to switch to the History tab
  2. Browse previous queries (most recent at top)
  3. Press Enter to load a query into the editor
  4. Use Ctrl+Up/Down in the editor to quickly cycle through history

Configuration

Connection Management

  • Last-used connection: Automatically pre-populated on startup with cursor on the password field
  • Saved connections: Browse with Up/Down, load with Enter, delete with Del
  • Password security: Passwords are never saved to disk; you must enter your password each session

Saved connections are stored in:

  • Linux/macOS: ~/.config/pgrsql/connections.toml
  • Windows: %APPDATA%\pgrsql\connections.toml

Format:

[[connections]]
name = "Production"host = "prod-db.example.com"port = 5432database = "myapp"username = "readonly"ssl_mode = "Require"
[[connections]]
name = "Local Dev"host = "localhost"port = 5432database = "myapp_dev"username = "postgres"ssl_mode = "Disable"

Query History

Query history is stored in:

  • Linux/macOS: ~/.local/share/pgrsql/history.json
  • Windows: %LOCALAPPDATA%\pgrsql\history.json

Examples

Basic SELECT

SELECT id, name, email
FROM users
WHERE created_at >'2024-01-01'ORDER BY name
LIMIT100;

JOIN Query

SELECTo.id,
u.nameas customer,
o.total,
o.created_atFROM orders o
JOIN users u ONu.id=o.user_idWHEREo.status='completed'ORDER BYo.created_atDESC;

Aggregate Query

SELECT
DATE_TRUNC('month', created_at) as month,
COUNT(*) as order_count,
SUM(total) as revenue
FROM orders
GROUP BY1ORDER BY1DESC;

Schema Inspection

-- List all tablesSELECT table_name
FROMinformation_schema.tablesWHERE table_schema ='public';
-- Describe a tableSELECT column_name, data_type, is_nullable
FROMinformation_schema.columnsWHERE table_name ='users';

Troubleshooting

Connection Issues

"Connection refused"

  • Verify PostgreSQL is running: pg_isready -h localhost -p 5432
  • Check if the host/port are correct
  • Ensure PostgreSQL is accepting connections in pg_hba.conf

"Password authentication failed"

  • Double-check your username and password
  • Verify the user exists: SELECT usename FROM pg_user;

"Database does not exist"

  • List available databases: psql -l
  • Create the database if needed: createdb mydb

Display Issues

"Garbled characters"

  • Ensure your terminal supports UTF-8
  • Try a different terminal emulator (iTerm2, Alacritty, Windows Terminal)

"Colors look wrong"

  • Set TERM=xterm-256color in your shell
  • Ensure your terminal supports 256 colors

Building from Source

Development Build

cargo build
./target/debug/pgrsql

Release Build

cargo build --release
./target/release/pgrsql

Running Tests

cargo test

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

pgrsql

A beautiful, fast TUI SQL editor for PostgreSQL written in Rust.

pgrsqlLicense

Features

  • Visual Database Browser: Navigate databases, schemas, and tables in a tree view
  • SQL Syntax Highlighting: Keywords, strings, numbers, and comments are color-coded
  • Query Results Table: Scrollable, navigable results with cell selection
  • Query History: Persistent history with search capability
  • Connection Management: Save and manage multiple PostgreSQL connections
  • Table Inspector: View table structure, columns, indexes, and DDL without writing queries
  • Export Results: Export query results to CSV, JSON, SQL INSERT, or TSV
  • Keyboard-First Design: Efficient navigation without leaving the keyboard
  • Dark Theme: Easy on the eyes for long coding sessions

Installation

Prerequisites

  • Rust (1.70 or later)
  • PostgreSQL server to connect to

From Source

git clone https://github.com/yourusername/pgrsql.git
cd pgrsql
cargo build --release

The binary will be at target/release/pgrsql.

With Cargo

cargo install --path .

Or once published:

cargo install pgrsql

Quick Start

  1. Launch pgrsql:

    pgrsql
  2. Connect to your database:

    • A connection dialog appears on startup
    • Your last-used connection is auto-populated (just enter your password)
    • Enter your PostgreSQL connection details:
      • Name: A friendly name for this connection
      • Host: Database host (e.g., localhost)
      • Port: Database port (default: 5432)
      • Database: Database name (e.g., postgres)
      • Username: Your PostgreSQL username
      • Password: Your password (must be entered each session for security)
    • Press Enter to connect
    • Use Up/Down to select saved connections, Del to delete them
  3. Write and execute queries:

    • Type your SQL in the editor pane
    • Press F5 or Ctrl+Enter to execute
    • Results appear in the bottom pane with row count and execution time
  4. Browse your schema:

    • Use the sidebar (left pane) to explore
    • Press 1, 2, or 3 to switch between Databases, Tables, and History tabs
    • Press Enter on a table to insert its name into the editor

Usage

Layout

┌─────────────────────────────────────────────────────────────┐
│ pgrsql user@localhost:5432/mydb | mydb | public │
├──────────────┬──────────────────────────────────────────────┤
│ Databases │ Query Editor │
│ Tables │ │
│ History │ SELECT * FROM users │
│ │ WHERE active = true; │
│ ▼ public │ │
│ ├ users ├──────────────────────────────────────────────┤
│ ├ orders │ Results (1/1) │
│ └ products │ id │ name │ email │ active │
│ │ 1 │ Alice │ alice@test.com │ true │
│ │ 2 │ Bob │ bob@test.com │ true │
├──────────────┴──────────────────────────────────────────────┤
│ 2 rows returned (12.34ms) │
└─────────────────────────────────────────────────────────────┘

Keyboard Shortcuts

Global

KeyAction
Ctrl+QQuit pgrsql
Ctrl+COpen connection dialog
?Toggle help overlay

Navigation

KeyAction
TabNext pane (Sidebar → Editor → Results → Sidebar)
Shift+TabPrevious pane

Note: In the Editor, Tab inserts spaces. Use Shift+Tab to go back to the Sidebar, or execute a query (F5) to move to Results.

Editor

KeyAction
F5 or Ctrl+EnterExecute query
Ctrl+LClear editor
Ctrl+UpPrevious query from history
Ctrl+DownNext query from history
Ctrl+CCopy selection
Ctrl+XCut selection
Ctrl+VPaste from clipboard
Ctrl+ASelect all
Ctrl+Left/RightMove by word
Home/EndMove to line start/end
Ctrl+Home/EndMove to document start/end

Sidebar

KeyAction
1 / 2 / 3Switch sidebar tab (Databases / Tables / History)
Up/DownNavigate items
EnterSelect/expand item
Ctrl+IOpen Table Inspector (when a table is selected)

Results

KeyAction
Arrow keysNavigate cells
Ctrl+CCopy selected cell value
Ctrl+[ / Ctrl+]Previous / Next result set
PageUp/PageDownScroll results
Home/EndJump to first/last column
Ctrl+SExport results (opens format picker)

Table Inspector

KeyAction
DToggle between Structure and DDL views
Ctrl+CCopy DDL to clipboard (in DDL view)
Up/DownScroll content
PageUp/PageDownScroll by 10 lines
Esc or qClose inspector

Table Inspector

The Table Inspector lets you view table metadata without writing SQL queries.

  1. Switch to the Tables tab (2) in the sidebar
  2. Expand a schema and select a table
  3. Press Ctrl+I to open the inspector

Structure View (default): Shows columns with their data types, nullability, primary key indicators, and default values. Also displays indexes with their columns and uniqueness.

DDL View (press D): Shows the full CREATE TABLE statement including all column definitions, constraints, and indexes. Press Ctrl+C to copy the DDL to your clipboard.

Working with Multiple Databases

  1. Press 1 to switch to the Databases tab in the sidebar
  2. Use arrow keys to select a database
  3. Press Enter to switch to that database
  4. The schema browser will refresh with the new database's contents

Working with Schemas

  1. Press 2 to switch to the Tables tab
  2. Schemas are shown with (collapsed) or (expanded)
  3. Press Enter on a schema to expand/collapse it
  4. Press Enter on a table to insert schema.table into the editor

Query History

  1. Press 3 to switch to the History tab
  2. Browse previous queries (most recent at top)
  3. Press Enter to load a query into the editor
  4. Use Ctrl+Up/Down in the editor to quickly cycle through history

Configuration

Connection Management

  • Last-used connection: Automatically pre-populated on startup with cursor on the password field
  • Saved connections: Browse with Up/Down, load with Enter, delete with Del
  • Password security: Passwords are never saved to disk; you must enter your password each session

Saved connections are stored in:

  • Linux/macOS: ~/.config/pgrsql/connections.toml
  • Windows: %APPDATA%\pgrsql\connections.toml

Format:

[[connections]]
name = "Production"host = "prod-db.example.com"port = 5432database = "myapp"username = "readonly"ssl_mode = "Require"
[[connections]]
name = "Local Dev"host = "localhost"port = 5432database = "myapp_dev"username = "postgres"ssl_mode = "Disable"

Query History

Query history is stored in:

  • Linux/macOS: ~/.local/share/pgrsql/history.json
  • Windows: %LOCALAPPDATA%\pgrsql\history.json

Examples

Basic SELECT

SELECT id, name, email
FROM users
WHERE created_at >'2024-01-01'ORDER BY name
LIMIT100;

JOIN Query

SELECTo.id,
u.nameas customer,
o.total,
o.created_atFROM orders o
JOIN users u ONu.id=o.user_idWHEREo.status='completed'ORDER BYo.created_atDESC;

Aggregate Query

SELECT
DATE_TRUNC('month', created_at) as month,
COUNT(*) as order_count,
SUM(total) as revenue
FROM orders
GROUP BY1ORDER BY1DESC;

Schema Inspection

-- List all tablesSELECT table_name
FROMinformation_schema.tablesWHERE table_schema ='public';
-- Describe a tableSELECT column_name, data_type, is_nullable
FROMinformation_schema.columnsWHERE table_name ='users';

Troubleshooting

Connection Issues

"Connection refused"

  • Verify PostgreSQL is running: pg_isready -h localhost -p 5432
  • Check if the host/port are correct
  • Ensure PostgreSQL is accepting connections in pg_hba.conf

"Password authentication failed"

  • Double-check your username and password
  • Verify the user exists: SELECT usename FROM pg_user;

"Database does not exist"

  • List available databases: psql -l
  • Create the database if needed: createdb mydb

Display Issues

"Garbled characters"

  • Ensure your terminal supports UTF-8
  • Try a different terminal emulator (iTerm2, Alacritty, Windows Terminal)

"Colors look wrong"

  • Set TERM=xterm-256color in your shell
  • Ensure your terminal supports 256 colors

Building from Source

Development Build

cargo build
./target/debug/pgrsql

Release Build

cargo build --release
./target/release/pgrsql

Running Tests

cargo test

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages