Showing posts with label PG Hand Book. Show all posts
Showing posts with label PG Hand Book. Show all posts

Jul 21, 2023

PostgreSQL DBA Handbook

How to connect with PostgreSQL-

sudo -i -u postgres



Grant the necessary privileges for the new user to connect to your
database:

Grant connect on database exampledb to user name;

Grant usage on schema public to user name;


How to Connect with PSQL Shell-

Psql


How to select version of PostgreSQL and Current Date-

Select Version ();



How to create Database in PostgreSQL –

Create database Employee;


How to Connect with Specific database in PostgreSQL-

\c database_name;


 

How many database are present in PostgreSQL Server-

\l+



How many tables are there in the PostgreSQL database-

\dt+


Create Table statement-

Create table empdetails (Id int primary key, Name (Text), Age (int), Address char (50), Salary (real));



Insert data in the Table-

Insert into empdetails (Id, Name, Age, Address, Salary) values (1, ‘Abhishek’, ‘25’, ‘LKO’ M ‘25000’);



Select Data from the Table-

Select * from empdetails;


Counting Rows statement-

Select count (*) from empdetails;


Structure table statement-

\d empdetails;


List all stored procedures and functions-

 \df+  or \df





 

Create user statement in PostgreSQL -

CREATE ROLE username Abhi LOGIN PASSWORD ‘secure@321’;


Change role for the current session to the new_role-

SET ROLE Abhi;


If you want to give all privileges to a newly created user, execute the following command-

GRANT ALL previleges

ON  table_name

TO  role_name; 


Check Table Privileges Using “\z” Command-

\z emp_info;



Drop user statement-

DROP USER 'account_name';  


Revoke Statement-

Revoke all privileages on table name from user name;



Show Users in PostgreSQL 

\du;


To log in without a password:

Psql –d dbname  -u username


 

Change PostgreSQL User Password Statement-

ALTER USER user_name WITH PASSWORD 'new_password';

 


PostgreSQL ALTER Table-

ADD a column in the table-

ALTER TABLE table_name

ADD COLUMN column_name datatype column_constraint;


Alter column in the table-

ALTER TABLE table_name  

Alter column_name column_definition  

[ FIRST | AFTER column_name ]; 


DROP column in table-

ALTER TABLE table_name

DROP COLUMN column_name;



 RENAME column in table-

ALTER TABLE table_name

RENAME COLUMN column_name

TO new_column_name;


RENAME table-

ALTER TABLE table_name  

RENAME TO new_table_name;  


Create Stored Procedure Syntax-

CREATE OR REPLACE FUNCTION my_stored_procedure()

LANGUAGE plpgsql;

AS

$$

BEGIN

    -- Your procedure logic goes here

    -- You can write SQL statements, control structures, etc.

    -- For example:

    RAISE NOTICE 'Hello, World!';

END;

$$

Let's break down the above example:

CREATE OR REPLACE FUNCTION: This is the statement to create a function or stored procedure in PostgreSQL. The OR REPLACE option allows you to modify the function if it already exists with the same name.

my_stored_procedure(): This is the name of the stored procedure. You can give it any name you prefer.

$$: This is the dollar-quoted string syntax that encloses the body of the stored procedure.

BEGIN and END: These keywords define the beginning and end of the procedure block, where you can write your procedure logic.

RAISE NOTICE 'Hello, World!';: This is an example of a statement inside the procedure. It raises a notice message that will be displayed when the procedure is executed.

LANGUAGE plpgsql;: This specifies the language used for the stored procedure. In this case, it's "plpgsql," which is the procedural language for PostgreSQL.



Create function in PostgreSQL Statement-

CREATE OR REPLACE FUNCTION get_total_rows(table_name text)

RETURNS bigint AS

$$

DECLARE

    total_rows bigint;

BEGIN

    EXECUTE format('SELECT COUNT(*) FROM %I', table_name) INTO total_rows;

    RETURN total_rows;

END;

$$

LANGUAGE plpgsql;



Create Trigger Statement-

CREATE TRIGGER trigger_name   

 {BEFORE | AFTER} { event }  

  ON table_name  

  [FOR [EACH] { ROW | STATEMENT }]  

  EXECUTE PROCEDURE trigger_function 




List sessions / active connections in PostgreSQL database-

select pid as process_id,

       usename as username,

       datname as database_name,

       client_addr as client_address,

       application_name,

       backend_start,

       state,

       state_change

from pg_stat_activity;

  • process_id - process ID of this backend
  • username - name of the user logged into this backend
  • database_name - name of the database this backend is connected to
  • client_address - IP address of the client connected to this backend
  • application_name - name of the application that is connected to this backend
  • backend_start - time when this process was started. For client backends, this is the time the client connected to the server.
  • State - current overall state of this backend. Possible values are:

o   active

o   idle

o   idle in transaction

o   idle in transaction (aborted)

o   fastpath function call

o   disabled

  • state change - time when the state was last changed


Finding blocked processes and blocking queries-

SELECT

    activity.pid,

    activity.usename,

    activity.query,

    blocking.pid AS blocking_id,

    blocking.query AS blocking_query

FROM pg_stat_activity AS activity

JOIN pg_stat_activity AS blocking ON blocking.pid = ANY(pg_blocking_pids(activity.pid));


Index Statement-

CREATE INDEX index_name ON table_name;


Single-Column Indexes-

CREATE INDEX index_name

ON table_name (column_name);


Multicolumn Indexes-

CREATE INDEX index_name

ON table_name (column1_name, column2_name);




Drop Primary Key-

ALTER TABLE table_name

DROP CONSTRAINT constraint_name;



PostgreSQL REINDEX syntax-

 REINDEX

  [ ( VERBOSE ) ]

  [ ( CONCURRENTLY [ boolean ] ) ]

  [ ( TABLESPACE new_tablespace ) ]

  { INDEX | TABLE | SCHEMA | DATABASE | SYSTEM } name;


Explanation:

  • The VERBOSE keyword is not required. If this keyword is specified, progress will be shown while the index is rebuilt.
  • The keyword CONCURRENTLY is optional. PostgreSQL will not halt any table operations while the index is rebuilt with it.
  • TABLESPACE new_tablespace is not required. PostgreSQL will use it to rebuild indexes on the new tablespace.
  • The index object to rebuild is specified by the term INDEX | TABLE | SCHEMA | DATABASE | SYSTEM.

 

·  REBUILD INDEX: Recreate the provided index.

·  TABLE: This command rebuilds all indexes in the chosen table.

·  SCHEMA: Rebuild all indexes in the schema supplied.

·  DATABASE: In the specified database, rebuild all indexes.

·  SYSTEM: Rebuild all indexes in the chosen database's system catalogue.

·  The name specifies the object's name.


Here are some examples of specific applications:

Use the INDEX keyword and the index name to recreate a single index:

REINDEX INDEX index_name; 


To rebuild all indexes in a table, use the TABLE keyword with the table name:

TABLE REINDEX table_name;


To rebuild all indexes in a schema, use the SCHEMA keyword and the schema name:

REINDEX SCHEMA schema_name;


Use the DATABASE keyword and the database name to rebuild all indexes in a database:

REINDEX DATABASE database_name;


Use the SYSTEM keyword and the database name to rebuild all indexes on the system catalogue in one data:

REINDEX SYSTEM database_name;


 

Exit psql shell-

\q