-
Getting Help of SQL commands
\h
- Getting help on special variables
\?
- List databases
\l
- List schemas
\dn
- Set schema to another one
SET SEARCH_PATH TO "temp-arthur-dev"
- List tables
\dt
- List indexes
\di
- List extensions
\dx
- List roles
\dg
- List users
\du
- Connect to a DB - an optional user can be specified (can be useful when connecting as another user)
\c databaseName [user]
- Show connection info:
\conninfo
You are connected to database "foo" as user "bar" on host "localhost" (address "::1") at port "5432".
- Enable timing of commands
\timing
- List users
\du
- Create a user
CREATE USER username;
- Create a user with password
CREATE USER test WITH PASSWORD 'password';
- Create a user with an encrypted password
CREATE USER readonly WITH ENCRYPTED PASSWORD 'readonly';
- Grant privileges
GRANT USAGE ON SCHEMA public to readonly;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonly;
-- On each database
GRANT CONNECT ON DATABASE foo to readonly;
\c foo
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO readonly; --- this grants privileges on new tables generated in new database "foo"
GRANT USAGE ON SCHEMA public to readonly;
GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;
- Drop a user
DROP USER username;
Enable DEBUG level logging - can be useful for troubleshooting procedures/extensions
SET client_min_messages TO DEBUG;
- They are 1-indexed
- Retrieve one element from an array
-- Retrieve the first element
arr[1]
- REGEXP_MATCHES for extracting part of a string
-- g to convert to an array (global)
SELECT
REGEXP_MATCHES(data::TEXT, '.*editor-id","~u(.{36})"', 'g') AS data_editor_id
...
- By default, postgres tries to connect to a database with the same name as your user. To prevent this default behaviour, just specify user and database:
psql -U Username DatabaseName
- Check that the database is ready
pg_isready --dbname=pitch --host=localhost --port=63333
- List top 20 table sizes
SELECT nspname || '.' || relname AS "relation",
pg_size_pretty(pg_total_relation_size(C.oid)) AS "total_size"
FROM pg_class C
LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
WHERE nspname NOT IN ('pg_catalog', 'information_schema')
AND C.relkind <> 'i'
AND nspname !~ '^pg_toast'
ORDER BY pg_total_relation_size(C.oid) DESC
LIMIT 20;
- Sample a percentage of rows with specified random seed
-- sample a percentage of rows with specified random seed
TABLESAMPLE BERNOULLI ({sample_percentage}) REPEATABLE (42)