Skip to content

Instantly share code, notes, and snippets.

@jayliew
Last active December 4, 2025 02:17
Show Gist options
  • Select an option

  • Save jayliew/9612d025e36f628ab9abfd4fa1fa397a to your computer and use it in GitHub Desktop.

Select an option

Save jayliew/9612d025e36f628ab9abfd4fa1fa397a to your computer and use it in GitHub Desktop.
postgres cheat / psql cheat

create user: CREATE ROLE username WITH LOGIN PASSWORD 'password';

show users: \du

create database: CREATE DATABASE databasename;

show databases: \l

use a specific db: \c dbnamehere;

give user permissions (this is too broad!!): GRANT ALL PRIVILEGES ON DATABASE super_awesome_database TO johndoe;

give user (less) permissions:

GRANT CONNECT ON DATABASE database_name TO username;

GRANT USAGE ON SCHEMA public TO username;

(just 1 table)
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE sometablenamehere TO username;

(all tables)
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO username;

(for INSERT, if auto-incremented ID, user will need access to SEQ):
GRANT USAGE, SELECT ON SEQUENCE sometablename_id_seq TO username;

give user ownership of db: ALTER DATABASE db_name OWNER TO new_owner_username;

change table owner: ALTER TABLE <tablename> OWNER TO <username>

show tables: \dt

describe table: \d <table name>

insert (use single quote for strings):

insert into mm_thoughts_contexts (t_id, mm_id) VALUES
(41, 289),
(5, 289),
(35, 289);
@jayliew
Copy link
Copy Markdown
Author

jayliew commented Jun 11, 2024

limited dev user. only permission to connect and do CRUD

GRANT CONNECT
ON database next13dbdev TO limiteddevuser;

GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO limiteddevuser;

GRANT USAGE ON SEQUENCE tablenamehere TO limiteddevuser;

@jayliew
Copy link
Copy Markdown
Author

jayliew commented Dec 1, 2025

-- as superuser, create new db with app only user

CREATE ROLE appusername WITH LOGIN PASSWORD 'appuserpasswd';

CREATE DATABASE appuserdbname; -- owner of db is still superuser

-- connect to correct database first!
/c database_name_here

GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE appusertable TO appusername;

-- to get seq name: SELECT pg_get_serial_sequence('appusertable', 'id'); 
GRANT USAGE, SELECT ON SEQUENCE appusertable_id_seq TO appusername;

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment