<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://halfface.se/wiki/index.php?action=history&amp;feed=atom&amp;title=Postgresql</id>
	<title>Postgresql - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://halfface.se/wiki/index.php?action=history&amp;feed=atom&amp;title=Postgresql"/>
	<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Postgresql&amp;action=history"/>
	<updated>2026-04-19T08:55:14Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Postgresql&amp;diff=16570&amp;oldid=prev</id>
		<title>Ekaanbj: /* sleep 2s */</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Postgresql&amp;diff=16570&amp;oldid=prev"/>
		<updated>2026-03-09T14:37:06Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;sleep 2s&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 14:37, 9 March 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l595&quot;&gt;Line 595:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 595:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  sudo -u postgres repmgr cluster show&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  sudo -u postgres repmgr cluster show&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=sleep 2s=&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=sleep 2s=&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  pg_sleep(&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;1&lt;/del&gt;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;select &lt;/ins&gt;pg_sleep(&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;2&lt;/ins&gt;)&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Postgresql&amp;diff=16569&amp;oldid=prev</id>
		<title>Ekaanbj: /* View status of postgresql server */</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Postgresql&amp;diff=16569&amp;oldid=prev"/>
		<updated>2026-03-09T14:36:00Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;View status of postgresql server&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 14:36, 9 March 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l594&quot;&gt;Line 594:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 594:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==View status of postgresql server==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==View status of postgresql server==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  sudo -u postgres repmgr cluster show&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  sudo -u postgres repmgr cluster show&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;=sleep 2s=&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; pg_sleep(1)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Postgresql&amp;diff=16427&amp;oldid=prev</id>
		<title>Ekaanbj: /* change owner of table */</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Postgresql&amp;diff=16427&amp;oldid=prev"/>
		<updated>2025-12-17T12:41:35Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;change owner of table&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 12:41, 17 December 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l592&quot;&gt;Line 592:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 592:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=change owner of table=&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=change owner of table=&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  ALTER TABLE heartbeat OWNER TO pguser;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  ALTER TABLE heartbeat OWNER TO pguser;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;==View status of postgresql server==&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; sudo -u postgres repmgr cluster show&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Postgresql&amp;diff=16370&amp;oldid=prev</id>
		<title>Ekaanbj: /* install postgres fedora(40) */</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Postgresql&amp;diff=16370&amp;oldid=prev"/>
		<updated>2025-11-06T12:45:16Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;install postgres fedora(40)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=psql=&lt;br /&gt;
==run command from cli==&lt;br /&gt;
 psql -c &amp;quot;SELECT datname FROM pg_database;&amp;quot;&lt;br /&gt;
==Connect to remote database:==&lt;br /&gt;
 export PGPASSWORD=&amp;lt;password&amp;gt; &amp;amp;&amp;amp; psql --host=&amp;lt;host&amp;gt; --port=5432 --username=&amp;lt;username&amp;gt; --no-password postgres&lt;br /&gt;
With variables&lt;br /&gt;
 export PGHOST=&amp;lt;database_host&amp;gt;&lt;br /&gt;
 export PGPORT=5432&lt;br /&gt;
 export PGUSER=&amp;lt;user&amp;gt;&lt;br /&gt;
 export PGPASSWORD=&amp;lt;password&amp;gt;&lt;br /&gt;
 export PGDATABASE=&amp;lt;database&amp;gt;&lt;br /&gt;
 psql&lt;br /&gt;
&lt;br /&gt;
==get what you ask for and less cruft==&lt;br /&gt;
 psql -A -t -c &amp;quot;SELECT * FROM pg_replication_slots;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=install psql=&lt;br /&gt;
 apt-get install freetds-bin&lt;br /&gt;
&lt;br /&gt;
=List databases=&lt;br /&gt;
==Alternative 1==&lt;br /&gt;
 SELECT datname FROM pg_database;&lt;br /&gt;
==Alternative 2==&lt;br /&gt;
gives more information too.&lt;br /&gt;
 \l&lt;br /&gt;
     Name     |    Owner    | Encoding |   Collate   |    Ctype    |   Access privileges   &lt;br /&gt;
 -------------+-------------+----------+-------------+-------------+-----------------------&lt;br /&gt;
  indata_mdb  | uc_etl_prod | UTF8     | sv_SE.UTF-8 | sv_SE.UTF-8 |&lt;br /&gt;
 ...&lt;br /&gt;
==Alternative 3==&lt;br /&gt;
 \l+&lt;br /&gt;
&lt;br /&gt;
=select database=&lt;br /&gt;
 \c testdb;&lt;br /&gt;
=show tables=&lt;br /&gt;
List all tables in all schemas&lt;br /&gt;
 \dt *.*&lt;br /&gt;
list tables in current schema&lt;br /&gt;
 \dt&lt;br /&gt;
Or from command line.&lt;br /&gt;
 su - postgres -c &amp;quot;psql -c \&amp;quot;\\dt \&amp;quot; database&amp;quot;&lt;br /&gt;
=list schemas=&lt;br /&gt;
 \dn&lt;br /&gt;
=list schemas with permissions=&lt;br /&gt;
 \dn+&lt;br /&gt;
&lt;br /&gt;
=schema/search_path=&lt;br /&gt;
List current schema&lt;br /&gt;
 SHOW search_path;&lt;br /&gt;
Change search path.&lt;br /&gt;
 SET search_path TO myschema, public;&lt;br /&gt;
&lt;br /&gt;
=describe table=&lt;br /&gt;
 \d table;&lt;br /&gt;
 \d dc_store.document;&lt;br /&gt;
&lt;br /&gt;
=Change view. One line per attribute(\G in mysql)=&lt;br /&gt;
 \x on&lt;br /&gt;
 psql -x -c &amp;quot;select * from blabla limit 1;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=exit/quit=&lt;br /&gt;
 \q&lt;br /&gt;
&lt;br /&gt;
=update=&lt;br /&gt;
 UPDATE users SET admin = 1 WHERE user_id = 14002;&lt;br /&gt;
=Create user=&lt;br /&gt;
 CREATE USER username WITH PASSWORD &amp;#039;MYPASS&amp;#039;;&lt;br /&gt;
=Create database=&lt;br /&gt;
 CREATE DATABASE database OWNER username;&lt;br /&gt;
&lt;br /&gt;
=create table=&lt;br /&gt;
 CREATE TABLE testtable (&lt;br /&gt;
    code        char(5) CONSTRAINT firstkey PRIMARY KEY,&lt;br /&gt;
    title       varchar(40) NOT NULL,&lt;br /&gt;
    did         integer NOT NULL,&lt;br /&gt;
    date_prod   date,&lt;br /&gt;
    kind        varchar(10),&lt;br /&gt;
    len         interval hour to minute&lt;br /&gt;
 );&lt;br /&gt;
=Add row to table=&lt;br /&gt;
 INSERT INTO testtable (code, title, did, date_prod, kind, len)&lt;br /&gt;
 VALUES (&amp;#039;A1234&amp;#039;, &amp;#039;Test Item&amp;#039;, 101, &amp;#039;2025-01-08&amp;#039;, &amp;#039;example&amp;#039;, &amp;#039;02:30&amp;#039;);&lt;br /&gt;
=add random rows to table=&lt;br /&gt;
 INSERT INTO testtable (code, title, did, date_prod, kind, len)&lt;br /&gt;
 SELECT&lt;br /&gt;
     &amp;#039;A&amp;#039; || LPAD(num::text, 4, &amp;#039;0&amp;#039;) AS code,         -- Generate code like A0001, A0002, ...&lt;br /&gt;
     &amp;#039;Test Item &amp;#039; || num::text AS title,             -- Title with the number&lt;br /&gt;
     (num % 10) + 1 AS did,                          -- Random did value (1 to 10)&lt;br /&gt;
     CURRENT_DATE - (num % 30) AS date_prod,         -- Random date in the last 30 days&lt;br /&gt;
     &amp;#039;example&amp;#039; AS kind,                              -- Example kind&lt;br /&gt;
     (num % 5 || &amp;#039; hours&amp;#039;)::interval AS len          -- Convert the generated text to interval&lt;br /&gt;
 FROM generate_series(1, 100) AS s(num);&lt;br /&gt;
&lt;br /&gt;
=create readaccess role and grant user access=&lt;br /&gt;
 CREATE ROLE readaccess;&lt;br /&gt;
 GRANT CONNECT ON DATABASE &amp;lt;database&amp;gt; TO readaccess;&lt;br /&gt;
 GRANT USAGE ON SCHEMA public TO readaccess;&lt;br /&gt;
 GRANT SELECT ON ALL TABLES IN SCHEMA public TO readaccess;&lt;br /&gt;
 CREATE USER &amp;lt;user&amp;gt; WITH PASSWORD &amp;#039;&amp;lt;password&amp;gt;&amp;#039;;&lt;br /&gt;
 GRANT readaccess TO &amp;lt;user&amp;gt;;&lt;br /&gt;
=grant access to a role for a user=&lt;br /&gt;
 GRANT ROLE &amp;lt;role_name&amp;gt; TO USER &amp;lt;user_name&amp;gt;;&lt;br /&gt;
 GRANT &amp;lt;role_name&amp;gt; TO &amp;lt;user_name&amp;gt;;&lt;br /&gt;
=grant all permissions to a user on a table=&lt;br /&gt;
 GRANT ALL PRIVILEGES ON TABLE table_name TO username;&lt;br /&gt;
&lt;br /&gt;
=Delete database=&lt;br /&gt;
 DROP DATABASE dbname;&lt;br /&gt;
==delete database from cli==&lt;br /&gt;
 dropdb $dbname&lt;br /&gt;
==delete table==&lt;br /&gt;
 DROP TABLE IF EXISTS table_name;&lt;br /&gt;
&lt;br /&gt;
=Import a database=&lt;br /&gt;
 psql username  -h hostname -d dbname &amp;lt; dump.sql&lt;br /&gt;
=change password=&lt;br /&gt;
 ALTER USER user_name WITH PASSWORD &amp;#039;new_password&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
=Set super privileges=&lt;br /&gt;
 ALTER USER username WITH SUPERUSER;&lt;br /&gt;
=Deleting user=&lt;br /&gt;
 DROP USER nomusr&lt;br /&gt;
=Getting help=&lt;br /&gt;
 \? or \h&lt;br /&gt;
=size of database=&lt;br /&gt;
 SELECT pg_size_pretty( pg_database_size(&amp;#039;database&amp;#039;) );&lt;br /&gt;
=size of table=&lt;br /&gt;
 SELECT pg_size_pretty( pg_total_relation_size(&amp;#039;tablename&amp;#039;) );&lt;br /&gt;
=clean archives older than 2 days=&lt;br /&gt;
 su postgres -c &amp;quot;/usr/pgsql-9.5/bin/pg_archivecleanup /var/lib/pgsql/9.5/archivedir/ $(basename $(find /var/lib/pgsql/9.5/archivedir/ -ctime +2 | tail -n 1))&amp;quot;&lt;br /&gt;
=backup=&lt;br /&gt;
# Backup database.&lt;br /&gt;
 DATABASE=very_nice_database ; pg_dump -Fc -Z 2 --file=/tmp/${DATABASE}.$(date &amp;#039;+%Y%m%d&amp;#039;).dump ${DATABASE}&lt;br /&gt;
# Is database in backup&lt;br /&gt;
 SELECT pg_is_in_backup();&lt;br /&gt;
&lt;br /&gt;
=restore=&lt;br /&gt;
Look at permissions on database&lt;br /&gt;
 psql -c &amp;quot;\l&amp;quot;&lt;br /&gt;
 export DATABASE=very_nice_database&lt;br /&gt;
Drop database connectipons.&lt;br /&gt;
 psql -c &amp;quot;SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = &amp;#039;${DATABASE}&amp;#039; AND pid &amp;lt;&amp;gt; pg_backend_pid();&amp;quot;&lt;br /&gt;
Drop database.&lt;br /&gt;
 dropdb ${DATABASE}&lt;br /&gt;
Create database&lt;br /&gt;
 createdb -T template0 ${DATABASE}&lt;br /&gt;
Restore database&lt;br /&gt;
 pg_restore -j8 -d ${DATABASE} --no-privileges --no-owner --clean --if-exists --exit-on-error /tmp/${DATABASE}.$(date &amp;#039;+%Y%m%d&amp;#039; --date &amp;quot;-4 days&amp;quot;).dump&lt;br /&gt;
# Set correct permissions.&lt;br /&gt;
 psql -c &amp;quot;ALTER DATABASE ${DATABASE} OWNER TO ${OWNER};&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=bookmarks=&lt;br /&gt;
https://wiki.postgresql.org/wiki/Disk_Usage&lt;br /&gt;
=bloat=&lt;br /&gt;
 Every record that has been deleted but is still taking some space is called a dead tuple. &lt;br /&gt;
 Once there is no dependency on those dead tuples with the already running transactions, the dead tuples are no longer needed. &lt;br /&gt;
 Thus, PostgreSQL runs VACUUM on such Tables. VACUUM reclaims the storage occupied by these dead tuples. &lt;br /&gt;
 The space occupied by these dead tuples may be referred to as Bloat. &lt;br /&gt;
 VACUUM scans the pages for dead tuples and marks them to the freespace map (FSM).&lt;br /&gt;
Query for bloat(which looks bloated... :-)&lt;br /&gt;
 SELECT&lt;br /&gt;
  current_database(), schemaname, tablename, /*reltuples::bigint, relpages::bigint, otta,*/&lt;br /&gt;
  ROUND((CASE WHEN otta=0 THEN 0.0 ELSE sml.relpages::FLOAT/otta END)::NUMERIC,1) AS tbloat,&lt;br /&gt;
  CASE WHEN relpages &amp;lt; otta THEN 0 ELSE bs*(sml.relpages-otta)::BIGINT END AS wastedbytes,&lt;br /&gt;
  iname, /*ituples::bigint, ipages::bigint, iotta,*/&lt;br /&gt;
  ROUND((CASE WHEN iotta=0 OR ipages=0 THEN 0.0 ELSE ipages::FLOAT/iotta END)::NUMERIC,1) AS ibloat,&lt;br /&gt;
  CASE WHEN ipages &amp;lt; iotta THEN 0 ELSE bs*(ipages-iotta) END AS wastedibytes&lt;br /&gt;
 FROM (&lt;br /&gt;
  SELECT&lt;br /&gt;
    schemaname, tablename, cc.reltuples, cc.relpages, bs,&lt;br /&gt;
    CEIL((cc.reltuples*((datahdr+ma-&lt;br /&gt;
      (CASE WHEN datahdr%ma=0 THEN ma ELSE datahdr%ma END))+nullhdr2+4))/(bs-20::FLOAT)) AS otta,&lt;br /&gt;
    COALESCE(c2.relname,&amp;#039;?&amp;#039;) AS iname, COALESCE(c2.reltuples,0) AS ituples, COALESCE(c2.relpages,0) AS ipages,&lt;br /&gt;
    COALESCE(CEIL((c2.reltuples*(datahdr-12))/(bs-20::FLOAT)),0) AS iotta -- very rough approximation, assumes all cols&lt;br /&gt;
  FROM (&lt;br /&gt;
    SELECT&lt;br /&gt;
      ma,bs,schemaname,tablename,&lt;br /&gt;
      (datawidth+(hdr+ma-(CASE WHEN hdr%ma=0 THEN ma ELSE hdr%ma END)))::NUMERIC AS datahdr,&lt;br /&gt;
      (maxfracsum*(nullhdr+ma-(CASE WHEN nullhdr%ma=0 THEN ma ELSE nullhdr%ma END))) AS nullhdr2&lt;br /&gt;
    FROM (&lt;br /&gt;
      SELECT&lt;br /&gt;
        schemaname, tablename, hdr, ma, bs,&lt;br /&gt;
        SUM((1-null_frac)*avg_width) AS datawidth,&lt;br /&gt;
        MAX(null_frac) AS maxfracsum,&lt;br /&gt;
        hdr+(&lt;br /&gt;
          SELECT 1+COUNT(*)/8&lt;br /&gt;
          FROM pg_stats s2&lt;br /&gt;
          WHERE null_frac&amp;lt;&amp;gt;0 AND s2.schemaname = s.schemaname AND s2.tablename = s.tablename&lt;br /&gt;
        ) AS nullhdr&lt;br /&gt;
      FROM pg_stats s, (&lt;br /&gt;
        SELECT&lt;br /&gt;
          (SELECT current_setting(&amp;#039;block_size&amp;#039;)::NUMERIC) AS bs,&lt;br /&gt;
          CASE WHEN SUBSTRING(v,12,3) IN (&amp;#039;8.0&amp;#039;,&amp;#039;8.1&amp;#039;,&amp;#039;8.2&amp;#039;) THEN 27 ELSE 23 END AS hdr,&lt;br /&gt;
          CASE WHEN v ~ &amp;#039;mingw32&amp;#039; THEN 8 ELSE 4 END AS ma&lt;br /&gt;
        FROM (SELECT version() AS v) AS foo&lt;br /&gt;
      ) AS constants&lt;br /&gt;
      GROUP BY 1,2,3,4,5&lt;br /&gt;
    ) AS foo&lt;br /&gt;
  ) AS rs&lt;br /&gt;
  JOIN pg_class cc ON cc.relname = rs.tablename&lt;br /&gt;
  JOIN pg_namespace nn ON cc.relnamespace = nn.oid AND nn.nspname = rs.schemaname AND nn.nspname &amp;lt;&amp;gt; &amp;#039;information_schema&amp;#039;&lt;br /&gt;
  LEFT JOIN pg_index i ON indrelid = cc.oid&lt;br /&gt;
  LEFT JOIN pg_class c2 ON c2.oid = i.indexrelid&lt;br /&gt;
 ) AS sml&lt;br /&gt;
 ORDER BY wastedbytes DESC&lt;br /&gt;
&lt;br /&gt;
==clear space vacuum==&lt;br /&gt;
 \c database&lt;br /&gt;
 vacuum;&lt;br /&gt;
if that doesn&amp;#039;t work do:&lt;br /&gt;
 vacuum: freeze; or vacuum full;&lt;br /&gt;
==vacuum table==&lt;br /&gt;
Select database&lt;br /&gt;
 \c ucc&lt;br /&gt;
select role&lt;br /&gt;
 SET search_path TO myschema, kdl;&lt;br /&gt;
Vacuum table&lt;br /&gt;
 vacuum full taxation_initial_data;&lt;br /&gt;
&lt;br /&gt;
=autovacuum=&lt;br /&gt;
Is autovacuum enabled.&lt;br /&gt;
 SHOW autovacuum;&lt;br /&gt;
&lt;br /&gt;
=count table=&lt;br /&gt;
 SELECT COUNT(*) FROM TABLE_NAME;&lt;br /&gt;
If you don&amp;#039;t need an exact count, the current statistic from the catalog table pg_class might be good enough and is much faster to retrieve for big tables.&lt;br /&gt;
 SELECT reltuples AS approximate_row_count FROM pg_class WHERE relname = &amp;#039;table_name&amp;#039;;&lt;br /&gt;
=number of connections=&lt;br /&gt;
 su - postgres -c &amp;quot;psql -t -c &amp;#039;SELECT * FROM pg_stat_activity;&amp;#039;&amp;quot; | wc -l&lt;br /&gt;
&lt;br /&gt;
=drop connections=&lt;br /&gt;
 SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = &amp;#039;dbname&amp;#039; AND pid &amp;lt;&amp;gt; pg_backend_pid();&lt;br /&gt;
&lt;br /&gt;
=postgres configuration=&lt;br /&gt;
 postgresql.conf&lt;br /&gt;
=pg_hba.conf=&lt;br /&gt;
Connections are configured in this file.&lt;br /&gt;
=reread configuration=&lt;br /&gt;
 su - postgres&lt;br /&gt;
 /usr/bin/pg_ctl reload&lt;br /&gt;
From psql&lt;br /&gt;
 SELECT pg_reload_conf();&lt;br /&gt;
&lt;br /&gt;
=list prepared transactions=&lt;br /&gt;
 select * from pg_prepared_xacts where database=&amp;#039;cti_batch&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
=remove prepared connecion=&lt;br /&gt;
 ROLLBACK PREPARED &amp;#039;131077_AAAAAAAAAAAAAP//rB6PFn41NfBevSfGABG7nTE=_AAAAAAAAAAAAAP//rB6PFn41NfBevSfGABG7pAAAAAIAAAAA&amp;#039;;&lt;br /&gt;
=pager off=&lt;br /&gt;
 \pset pager off&lt;br /&gt;
=pager less=&lt;br /&gt;
 \x auto&lt;br /&gt;
 \pset pager on&lt;br /&gt;
 \setenv PAGER less&lt;br /&gt;
&lt;br /&gt;
=pager=&lt;br /&gt;
 export PAGER=less&lt;br /&gt;
=config file=&lt;br /&gt;
.my.cnf&lt;br /&gt;
 .pgpass&lt;br /&gt;
 hostname:port:database:username:password&lt;br /&gt;
 hostname:port:*:username:password&lt;br /&gt;
&lt;br /&gt;
=Permissions in postgres=&lt;br /&gt;
 pg_hba.conf  local file         which is a local file that defines which sources for login credentials to use. (ldap, local users... to me it feels like nsswitch.conf)&lt;br /&gt;
 owner        database           of database. The right to modify or destroy an object is always the privilege of the owner only.&lt;br /&gt;
 role:s       separate database  are like user and groups combined. One role can inherit another. Different attributes gives various capabilities. login, superuser...&lt;br /&gt;
 privileges   database           on (table, function...): SELECT , INSERT , UPDATE , DELETE&lt;br /&gt;
 You can login with one role and then switch to another.&lt;br /&gt;
=privileges granted to users on all tables=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
    grantee,&lt;br /&gt;
    table_schema,&lt;br /&gt;
    table_name,&lt;br /&gt;
    privilege_type&lt;br /&gt;
FROM &lt;br /&gt;
    information_schema.role_table_grants&lt;br /&gt;
ORDER BY &lt;br /&gt;
    grantee, table_schema, table_name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Listing Users and Their Membership in Roles=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
    r.rolname AS role_name,&lt;br /&gt;
    m.rolname AS member_name&lt;br /&gt;
FROM &lt;br /&gt;
    pg_auth_members am&lt;br /&gt;
JOIN &lt;br /&gt;
    pg_roles r ON r.oid = am.roleid&lt;br /&gt;
JOIN &lt;br /&gt;
    pg_roles m ON m.oid = am.member&lt;br /&gt;
ORDER BY &lt;br /&gt;
    role_name, member_name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Listing All Users with Their Database-Level Privileges=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT&lt;br /&gt;
    pg_database.datname,&lt;br /&gt;
    pg_roles.rolname,&lt;br /&gt;
    has_database_privilege(pg_roles.rolname, pg_database.datname, &amp;#039;CONNECT&amp;#039;) AS can_connect,&lt;br /&gt;
    has_database_privilege(pg_roles.rolname, pg_database.datname, &amp;#039;CREATE&amp;#039;) AS can_create,&lt;br /&gt;
    has_database_privilege(pg_roles.rolname, pg_database.datname, &amp;#039;TEMP&amp;#039;) AS can_create_temp_tables&lt;br /&gt;
FROM &lt;br /&gt;
    pg_database&lt;br /&gt;
CROSS JOIN &lt;br /&gt;
    pg_roles&lt;br /&gt;
ORDER BY &lt;br /&gt;
    pg_database.datname, pg_roles.rolname;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Is user superuser=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
    rolname AS role_name,&lt;br /&gt;
    CASE WHEN rolsuper THEN &amp;#039;Yes&amp;#039; ELSE &amp;#039;No&amp;#039; END AS is_superuser&lt;br /&gt;
FROM &lt;br /&gt;
    pg_roles;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=roles/users=&lt;br /&gt;
Which roles and users exist.&lt;br /&gt;
 \du&lt;br /&gt;
&lt;br /&gt;
=set new role=&lt;br /&gt;
 set role super-man;&lt;br /&gt;
=current role=&lt;br /&gt;
user name of current execution context&lt;br /&gt;
 SELECT current_user;&lt;br /&gt;
=session user=&lt;br /&gt;
 SELECT session_user;&lt;br /&gt;
&lt;br /&gt;
=display privileges=&lt;br /&gt;
 \dp&lt;br /&gt;
 \z&lt;br /&gt;
=tablespaces=&lt;br /&gt;
List tablespaces&lt;br /&gt;
 SELECT spcname FROM pg_tablespace;&lt;br /&gt;
=how many rows in table=&lt;br /&gt;
 SELECT reltuples AS estimate FROM pg_class where relname = &amp;#039;member_offer&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
=delete rows matching value and timestamp=&lt;br /&gt;
 DELETE FROM receipt_transaction WHERE status_point = &amp;#039;FAIL_POINT_CALC&amp;#039; and business_date  &amp;lt; ( now() - interval &amp;#039;+14 day&amp;#039; ) ;&lt;br /&gt;
=delete all rows=&lt;br /&gt;
 TRUNCATE TABLE public.subscribe;&lt;br /&gt;
 DELETE FROM public.subscribe;&lt;br /&gt;
&lt;br /&gt;
=user password=&lt;br /&gt;
 ~/.pgpass&lt;br /&gt;
 hostname:port:database:username:password&lt;br /&gt;
=kill=&lt;br /&gt;
Kill less agressive&lt;br /&gt;
 select pg_cancel_backend(16967);&lt;br /&gt;
kill&lt;br /&gt;
 select pg_terminate_backend(16967) from pg_stat_activity;&lt;br /&gt;
&lt;br /&gt;
=who are you and where do you come from, whoami=&lt;br /&gt;
 SELECT CURRENT_USER usr, :&amp;#039;HOST&amp;#039; host, inet_server_port() port;&lt;br /&gt;
or&lt;br /&gt;
 \conninfo&lt;br /&gt;
=running queries on standby=&lt;br /&gt;
 max_standby_archive_delay = 600s&lt;br /&gt;
 max_standby_streaming_delay = 600s&lt;br /&gt;
=analyze query=&lt;br /&gt;
 EXPLAIN ANALYZE select ...&lt;br /&gt;
=version=&lt;br /&gt;
 SELECT version();&lt;br /&gt;
=master/slave setup=&lt;br /&gt;
Streaming replication in PostgreSQL works on log shipping. Every transaction in postgres is written to a transaction log called WAL (write-ahead log) to achieve durability. A slave uses these WAL segments to continuously replicate changes from its master.&lt;br /&gt;
There exists three mandatory processes – wal sender , wal receiver and startup process, these play a major role in achieving streaming replication in postgres.&lt;br /&gt;
Log Sequence Number, or LSN, is a pointer to a location in the WAL.&lt;br /&gt;
=wal(write ahead log)=&lt;br /&gt;
 pg_xlog directory holds the WAL (Write Ahead Log) files.WAL files contain a record of all changes made to the database.&lt;br /&gt;
&lt;br /&gt;
=Is replication moving=&lt;br /&gt;
This LSN(Log Sequence Number) indicates the position in the WAL(Write-Ahead Log) up to which changes have been safely flushed and confirmed by subscribers or replication processes.&lt;br /&gt;
 SELECT slot_name, plugin, confirmed_flush_lsn, slot_type, restart_lsn FROM pg_replication_slots;&lt;br /&gt;
=grant user replication permissions=&lt;br /&gt;
 ALTER ROLE &amp;lt;username&amp;gt; WITH REPLICATION;&lt;br /&gt;
&lt;br /&gt;
=how much space is used by wal=&lt;br /&gt;
 SELECT slot_name, pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(),restart_lsn)) AS replicationSlotLag, active FROM pg_replication_slots ;&lt;br /&gt;
&lt;br /&gt;
=List tablespaces=&lt;br /&gt;
 \db&lt;br /&gt;
&lt;br /&gt;
=list clusters=&lt;br /&gt;
 pg_lsclusters&lt;br /&gt;
=pgbackrest=&lt;br /&gt;
 # https://pgbackrest.org/user-guide.html#introduction&lt;br /&gt;
 # Install pgbackrest&lt;br /&gt;
 apt-get install -y pgbackrest&lt;br /&gt;
 # pg-primary - Create pgBackRest configuration file and directories&lt;br /&gt;
 mkdir -p -m 770 /var/log/pgbackrest&lt;br /&gt;
 chown postgres:postgres /var/log/pgbackrest&lt;br /&gt;
 mkdir -p /etc/pgbackrest&lt;br /&gt;
 mkdir -p /etc/pgbackrest/conf.d&lt;br /&gt;
 touch /etc/pgbackrest/pgbackrest.conf&lt;br /&gt;
 chmod 640 /etc/pgbackrest/pgbackrest.conf&lt;br /&gt;
 chown postgres:postgres /etc/pgbackrest/pgbackrest.conf&lt;br /&gt;
 # Does it work?&lt;br /&gt;
 sudo -u postgres pgbackrest&lt;br /&gt;
 # Configure the PostgreSQL cluster data directory&lt;br /&gt;
 # pg-primary:/etc/pgbackrest/pgbackrest.conf&lt;br /&gt;
 [billo_dev]&lt;br /&gt;
 pg1-path=/var/lib/postgresql/12/billo_dev&lt;br /&gt;
 # On machine taking backups.&lt;br /&gt;
 # Configure the pgBackRest repository path&lt;br /&gt;
 # /etc/pgbackrest/pgbackrest.conf&lt;br /&gt;
 [demo]&lt;br /&gt;
 pg1-path=/var/lib/postgresql/12/demo&lt;br /&gt;
 [global]&lt;br /&gt;
 repo1-path=/var/lib/pgbackrest&lt;br /&gt;
 # /etc/postgresql/12/main/postgresql.conf &lt;br /&gt;
 archive_command = &amp;#039;pgbackrest --stanza=billo_dev archive-push %p&amp;#039;&lt;br /&gt;
 archive_mode = on&lt;br /&gt;
 max_wal_senders = 3&lt;br /&gt;
 wal_level = replica&lt;br /&gt;
 # setup backup.&lt;br /&gt;
 sudo -u postgres pgbackrest --stanza=billo_dev --log-level-console=info stanza-create&lt;br /&gt;
 # check configuration&lt;br /&gt;
 sudo -u postgres pgbackrest --stanza=billo_dev --log-level-console=info check&lt;br /&gt;
 # Run backup&lt;br /&gt;
 sudo -u postgres pgbackrest --stanza=billo_dev --log-level-console=info backup&lt;br /&gt;
 # Differential backup&lt;br /&gt;
 sudo -u postgres pgbackrest --stanza=billo_dev --log-level-console=info --type=diff backup&lt;br /&gt;
 # Full backup&lt;br /&gt;
 sudo -u postgres pgbackrest --stanza=billo_dev --log-level-console=info --type=full backup&lt;br /&gt;
 # Every 10 minutes except for 2:00-2:59&lt;br /&gt;
 */10 0-1,3-23 * * * pgbackrest --stanza=billo_dev --type=diff backup&lt;br /&gt;
 # 02:10 02:20 02:30 02:40 02:50&lt;br /&gt;
 10-50/10 2 * * *    pgbackrest --stanza=billo_dev --type=diff backup&lt;br /&gt;
 # 3:00 Full&lt;br /&gt;
 0 2 * * *           pgbackrest --stanza=billo_dev --type=full backup&lt;br /&gt;
 # List backup information&lt;br /&gt;
 sudo -u postgres pgbackrest info &lt;br /&gt;
 ...&lt;br /&gt;
 # Restore backup last backup.&lt;br /&gt;
 sudo -u postgres find /var/lib/postgresql/12/billo_dev -mindepth 1 -delete&lt;br /&gt;
 # Restore the cluster and start PostgreSQL&lt;br /&gt;
 sudo -u postgres pgbackrest --stanza=billo_dev restore&lt;br /&gt;
 sudo pg_ctlcluster 12 restore start&lt;br /&gt;
 ...&lt;br /&gt;
 # Restore backup from certain time.&lt;br /&gt;
 sudo -u postgres find /var/lib/postgresql/12/billo_dev -mindepth 1 -delete&lt;br /&gt;
 # Restore the cluster and start PostgreSQL&lt;br /&gt;
 sudo -u postgres pgbackrest --stanza=billo_dev --set 20220321-113900F_20220321-122001D restore&lt;br /&gt;
 sudo pg_ctlcluster 12 restore start&lt;br /&gt;
==install on remote machine==&lt;br /&gt;
===repository===&lt;br /&gt;
 sudo adduser --disabled-password --gecos &amp;quot;&amp;quot; pgbackrest&lt;br /&gt;
===setup directories===&lt;br /&gt;
 mkdir -p -m 770 /var/log/pgbackrest&lt;br /&gt;
 chown pgbackrest:pgbackrest /var/log/pgbackrest&lt;br /&gt;
 mkdir -p /etc/pgbackrest&lt;br /&gt;
 mkdir -p /etc/pgbackrest/conf.d&lt;br /&gt;
 touch /etc/pgbackrest/pgbackrest.conf&lt;br /&gt;
 chmod 640 /etc/pgbackrest/pgbackrest.conf&lt;br /&gt;
 chown pgbackrest:pgbackrest /etc/pgbackrest/pgbackrest.conf&lt;br /&gt;
 mkdir -p /var/lib/pgbackrest&lt;br /&gt;
 chmod 750 /var/lib/pgbackrest&lt;br /&gt;
 chown pgbackrest:pgbackrest /var/lib/pgbackrest&lt;br /&gt;
===passwordless login===&lt;br /&gt;
 sudo -u pgbackrest mkdir -m 750 /home/pgbackrest/.ssh&lt;br /&gt;
 sudo -u pgbackrest ssh-keygen -f /home/pgbackrest/.ssh/id_rsa -t rsa -b 4096 -N &amp;quot;&amp;quot;&lt;br /&gt;
==Install on Postgres server==&lt;br /&gt;
 sudo -u postgres mkdir -m 750 -p /var/lib/postgresql/.ssh&lt;br /&gt;
 sudo -u postgres ssh-keygen -f /var/lib/postgresql/.ssh/id_rsa -t rsa -b 4096 -N &amp;quot;&amp;quot;&lt;br /&gt;
===ssh keys===&lt;br /&gt;
 server     -&amp;gt; postgres   -&amp;gt; ssh pgbackrest@repository /usr/bin/pgbackrest&lt;br /&gt;
 no-agent-forwarding,no-X11-forwarding,no-port-forwarding,command=&amp;quot;/usr/bin/pgbackrest ${SSH_ORIGINAL_COMMAND#* }&amp;quot; ssh-rsa $public_ssh_key postgres@server&lt;br /&gt;
&lt;br /&gt;
 repository -&amp;gt; pgbackrest -&amp;gt; ssh postgres@server /usr/bin/pgbackrest.&lt;br /&gt;
 no-agent-forwarding,no-X11-forwarding,no-port-forwarding,command=&amp;quot;/usr/bin/pgbackrest ${SSH_ORIGINAL_COMMAND#* }&amp;quot; ssh-rsa $public_ssh_key pgbackrest@repository&lt;br /&gt;
=prompt=&lt;br /&gt;
Create ~/.psqlrc with below here document.&lt;br /&gt;
 cat &amp;lt;&amp;lt; &amp;#039;EOF&amp;#039; &amp;gt; ~/.psqlrc&lt;br /&gt;
 \set PROMPT1 &amp;#039;(%n@%M:%&amp;gt;) %`date &amp;quot;+%H:%M:%S %Z&amp;quot;` [%/] \n%x%# &amp;#039;&lt;br /&gt;
 \set PROMPT2 &amp;#039;%M %n@%/%R %# &amp;#039;&lt;br /&gt;
 \x auto&lt;br /&gt;
 \pset pager on&lt;br /&gt;
 \setenv PAGER less&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=index=&lt;br /&gt;
Size of index.&lt;br /&gt;
 SELECT i.indexrelname, x.indexrelid, pg_size_pretty(size)&lt;br /&gt;
 FROM (SELECT indexrelid, pg_indexes_size(indrelid) AS size&lt;br /&gt;
       FROM pg_index) x&lt;br /&gt;
 JOIN pg_stat_user_indexes i ON i.indexrelid = x.indexrelid&lt;br /&gt;
 ORDER BY size DESC;&lt;br /&gt;
=Privilege	Abbreviation=&lt;br /&gt;
 Privilege     Abbreviation  Applicable Object Types&lt;br /&gt;
 SELECT        r (“read”)    LARGE OBJECT, SEQUENCE, TABLE (and table-like objects), table column&lt;br /&gt;
 INSERT        a (“append”)  TABLE, table column&lt;br /&gt;
 UPDATE        w (“write”)   LARGE OBJECT, SEQUENCE, TABLE, table column&lt;br /&gt;
 DELETE        d             TABLE&lt;br /&gt;
 TRUNCATE      D             TABLE&lt;br /&gt;
 REFERENCES    x             TABLE, table column&lt;br /&gt;
 TRIGGER       t             TABLE&lt;br /&gt;
 CREATE        C             DATABASE, SCHEMA, TABLESPACE&lt;br /&gt;
 CONNECT       c             DATABASE&lt;br /&gt;
 TEMPORARY     T             DATABASE&lt;br /&gt;
 EXECUTE       X             FUNCTION, PROCEDURE&lt;br /&gt;
 USAGE         U             DOMAIN, FOREIGN DATA WRAPPER, FOREIGN SERVER, LANGUAGE, SCHEMA, SEQUENCE, TYPE&lt;br /&gt;
 SET           s             PARAMETER&lt;br /&gt;
 ALTER SYSTEM  A             PARAMETER&lt;br /&gt;
=which codepage is being used on database=&lt;br /&gt;
 SELECT datname, pg_encoding_to_char(encoding) AS encoding FROM pg_database;&lt;br /&gt;
=install postgres ubuntu (24)=&lt;br /&gt;
 apt install postgresql-16 postgresql-contrib-16&lt;br /&gt;
 systemctl enable postgresql --now&lt;br /&gt;
 vim /etc/postgresql/16/main/pg_hba.conf&lt;br /&gt;
 sed -i &amp;quot;s/.*listen_addresses.*/listen_addresses = &amp;#039;*&amp;#039;/g&amp;quot; /etc/postgresql/16/main/postgresql.conf&lt;br /&gt;
 systemctl restart postgresql&lt;br /&gt;
&lt;br /&gt;
=install postgres fedora(40)=&lt;br /&gt;
 sudo dnf install postgresql-server postgresql-contrib&lt;br /&gt;
 sudo systemctl enable postgresql&lt;br /&gt;
 sudo postgresql-setup --initdb --unit postgresql&lt;br /&gt;
 # Grant access for user.&lt;br /&gt;
 sudo vim /var/lib/pgsql/data/pg_hba.conf&lt;br /&gt;
 local   all             all                                md5&lt;br /&gt;
 # Allow database to be reached.&lt;br /&gt;
 sudo sed -i &amp;quot;s/.*listen_addresses.*/listen_addresses = &amp;#039;*&amp;#039;/g&amp;quot; /var/lib/pgsql/data/postgresql.conf&lt;br /&gt;
 # Make changes active.&lt;br /&gt;
 sudo service postgresql restart&lt;br /&gt;
 CREATE USER username WITH PASSWORD &amp;#039;password&amp;#039;;&lt;br /&gt;
 CREATE DATABASE database OWNER username;&lt;br /&gt;
 CREATE TABLE testtable (&lt;br /&gt;
    code        char(5) CONSTRAINT firstkey PRIMARY KEY,&lt;br /&gt;
    title       varchar(40) NOT NULL,&lt;br /&gt;
    did         integer NOT NULL,&lt;br /&gt;
    date_prod   date,&lt;br /&gt;
    kind        varchar(10),&lt;br /&gt;
    len         interval hour to minute&lt;br /&gt;
 );&lt;br /&gt;
 GRANT SELECT ON TABLE testtable TO username;&lt;br /&gt;
 # Test connectivity&lt;br /&gt;
 export PGPASSWORD=password &amp;amp;&amp;amp; psql --host=$(hostname -f) --port=5432 --username=username --no-password postgres&lt;br /&gt;
&lt;br /&gt;
=uptime=&lt;br /&gt;
 select current_timestamp - pg_postmaster_start_time() as uptime;&lt;br /&gt;
=frequently running query=&lt;br /&gt;
 with&lt;br /&gt;
 a as (select dbid, queryid, query, calls s from pg_stat_statements),&lt;br /&gt;
 b as (select dbid, queryid, query, calls s from pg_stat_statements, pg_sleep(1))&lt;br /&gt;
 select&lt;br /&gt;
         pd.datname as db_name,&lt;br /&gt;
         substr(a.query, 1, 400) as the_query,&lt;br /&gt;
         sum(b.s-a.s) as runs_per_second&lt;br /&gt;
 from a, b, pg_database pd&lt;br /&gt;
 where&lt;br /&gt;
   a.dbid= b.dbid&lt;br /&gt;
 and&lt;br /&gt;
   a.queryid = b.queryid&lt;br /&gt;
 and&lt;br /&gt;
   pd.oid=a.dbid&lt;br /&gt;
 group by 1, 2&lt;br /&gt;
 order by 3 desc;&lt;br /&gt;
=sessions older than 1 second=&lt;br /&gt;
 select&lt;br /&gt;
     now()-query_start as runtime, &lt;br /&gt;
     pid as process_id,&lt;br /&gt;
     datname as db_name,&lt;br /&gt;
     client_addr,&lt;br /&gt;
     client_hostname,&lt;br /&gt;
     query&lt;br /&gt;
 from pg_stat_activity&lt;br /&gt;
 where state!=&amp;#039;idle&amp;#039;&lt;br /&gt;
 and now() - query_start &amp;gt; &amp;#039;1 seconds&amp;#039;::interval&lt;br /&gt;
 order by 1 desc;&lt;br /&gt;
&lt;br /&gt;
=cpu usage per query=&lt;br /&gt;
 SELECT &lt;br /&gt;
         pss.userid,&lt;br /&gt;
         pss.dbid,&lt;br /&gt;
         pd.datname as db_name,&lt;br /&gt;
         round((pss.total_exec_time + pss.total_plan_time)::numeric, 2) as total_time, &lt;br /&gt;
         pss.calls, &lt;br /&gt;
         round((pss.mean_exec_time+pss.mean_plan_time)::numeric, 2) as mean, &lt;br /&gt;
         round((100 * (pss.total_exec_time + pss.total_plan_time) / sum((pss.total_exec_time + pss.total_plan_time)::numeric) OVER ())::numeric, 2) as cpu_portion_pctg,&lt;br /&gt;
         pss.query&lt;br /&gt;
 FROM pg_stat_statements pss, pg_database pd &lt;br /&gt;
 WHERE pd.oid=pss.dbid&lt;br /&gt;
 ORDER BY (pss.total_exec_time + pss.total_plan_time)&lt;br /&gt;
 DESC LIMIT 30;&lt;br /&gt;
=performance troubleshooting=&lt;br /&gt;
 https://jfrog.com/community/data-science/troubleshooting-high-cpu-utilization-in-postgresql-databases-a-how-to-guide/&lt;br /&gt;
=Which charactertable does database use?=&lt;br /&gt;
 psql -d &amp;lt;database&amp;gt; -c &amp;#039;SHOW SERVER_ENCODING;&amp;#039;&lt;br /&gt;
=change owner of table=&lt;br /&gt;
 ALTER TABLE heartbeat OWNER TO pguser;&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
</feed>