Difference between revisions of "PostgreSQL"
Rafahsolis (talk | contribs) |
Rafahsolis (talk | contribs) Tag: visualeditor |
||
| (17 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
| − | == Install == | + | ==Install== |
| − | === Debian/Ubuntu === | + | ===Debian/Ubuntu=== |
| − | sudo apt | + | sudo apt update |
| − | sudo apt | + | sudo apt install postgresql postgresql-contrib |
| − | == Remote access == | + | ==Data directory== |
| + | <code>/var/lib/postgresql</code> | ||
| + | <br /> | ||
| + | ==Remote access== | ||
1.- Modify pg_hba.conf to add Client Authentication Record<br /> | 1.- Modify pg_hba.conf to add Client Authentication Record<br /> | ||
To allow remote access edit: /etc/postgresql/9.4/main/pg_hba.conf | To allow remote access edit: /etc/postgresql/9.4/main/pg_hba.conf | ||
| Line 10: | Line 13: | ||
Example: | Example: | ||
<nowiki> TYPE DATABASE USER CIDR-ADDRESS METHOD | <nowiki> TYPE DATABASE USER CIDR-ADDRESS METHOD | ||
| − | + | ||
| − | # IPv4 local connections: | + | # IPv4 local connections: |
| − | host all all 127.0.0.1/32 md5 | + | host all all 127.0.0.1/32 md5 |
| − | # IPv6 local connections: | + | # IPv6 local connections: |
| − | host all all ::1/128 md5</nowiki> | + | host all all ::1/128 md5</nowiki> |
2.- Change the Listen Address in postgresql.conf | 2.- Change the Listen Address in postgresql.conf | ||
| Line 20: | Line 23: | ||
set: listen_addresses = '*' | set: listen_addresses = '*' | ||
| − | == Crate users == | + | ==Crate users== |
From postgres shell account type: | From postgres shell account type: | ||
createuser --interactive | createuser --interactive | ||
| + | To change the user password: | ||
| + | ALTER USER postgres WITH ENCRYPTED PASSWORD 'P@$$worD1'; | ||
| + | ==Create database== | ||
| + | From the postgres user shell: | ||
| + | createdb test1 | ||
| + | ==CREATE TABLE / DROP TABLE== | ||
| + | <nowiki> | ||
| + | CREATE TABLE table_name ( | ||
| + | column_name1 col_type (field_length) column_constraints, | ||
| + | column_name2 col_type (field_length), | ||
| + | column_name3 col_type (field_length) | ||
| + | ); | ||
| + | |||
| + | DROP TABLE table_name;</nowiki> | ||
| + | |||
| + | === Drop all tables === | ||
| + | <syntaxhighlight lang="sql"> | ||
| + | DO $$ DECLARE | ||
| + | r RECORD; | ||
| + | BEGIN | ||
| + | FOR r IN (SELECT tablename FROM pg_tables WHERE schemaname = 'public') LOOP | ||
| + | EXECUTE 'DROP TABLE IF EXISTS public.' || quote_ident(r.tablename) || ' CASCADE'; | ||
| + | END LOOP; | ||
| + | END $$; | ||
| + | </syntaxhighlight> | ||
| + | |||
| + | ==List users== | ||
| + | \du | ||
| + | ==List databases== | ||
| + | \list or \l | ||
| + | |||
| + | ==List tables== | ||
| + | \d | ||
| + | \dt | ||
| + | |||
| + | ==ADD, QUERY, DELETE from table== | ||
| + | Add | ||
| + | INSERT INTO table_name (column_name1, column_name2, column_name3, column_name4) | ||
| + | VALUES ('value1', 'value2', 'value3', 'value4'); | ||
| + | Query | ||
| + | SELECT * FROM table_name; | ||
| + | Delete | ||
| + | DELETE FROM table_name WHERE column_name = 'value1'; | ||
| + | Update | ||
| + | UPDATE table_name SET column_name1= 'value32' WHERE column_name2 = 'value2'; | ||
| + | ==ALTER TABLE== | ||
| + | ALTER TABLE table_name ADD column_name5 date; | ||
| + | ALTER TABLE table_name DROP column_name5; | ||
| + | |||
| + | ==Dump database== | ||
| + | <syntaxhighlight lang="bash"> | ||
| + | g_dump -C -h localhost -U scrapy scrapydb > scrapydb_dump.sql | ||
| + | </syntaxhighlight> | ||
| + | |||
| + | ===Dump one database to another database=== | ||
| + | <syntaxhighlight lang="bash"> | ||
| + | g_dump -C -h localhost -U scrapy scrapydb | psql -h ec2-54-77-228-53.eu-west-1.compute.amazonaws.com -U scrapy scrapydb | ||
| + | </syntaxhighlight> | ||
| + | |||
| + | ==Import .sql dump file== | ||
| + | psql databasename < data_base_dump | ||
| + | pg_restore -h localhost -U postgres -d mapper -1 /tmp/mapper_before_refactoring_2018_11_13.sql | ||
| + | |||
| + | ==Error creating UTF-8 database== | ||
| + | 02:39:35: Error: ERROR: new encoding (UTF8) is incompatible with the encoding of the template database (SQL_ASCII) | ||
| + | SUGERENCIA: Use the same encoding as in the template database, or use template0 as template. | ||
| + | |||
| + | |||
| + | ==Create user, database and password== | ||
| + | |||
| + | *Create the user<br /> | ||
| + | |||
| + | postgres@hostname:~$ createuser | ||
| + | |||
| + | Enter name of role to add: username | ||
| + | Shall the new role be a superuser? (y/n) n | ||
| + | Shall the new role be allowed to create databases? (y/n) n | ||
| + | Shall the new role be allowed to create more new roles? (y/n) n | ||
| + | CREATE ROLE | ||
| + | |||
| + | *Create the DB | ||
| + | |||
| + | postgres@hostname:~$ createdb databasename | ||
| + | CREATE DATABASE | ||
| + | postgres@hostname:~$ | ||
| + | |||
| + | *Grant access for the user to the DB | ||
| + | |||
| + | postgres@hostname:~$ psql | ||
| + | postgres=# alter user username with encrypted password 'password'; | ||
| + | ALTER ROLE | ||
| + | postgres=# grant all privileges on database databasename to username; | ||
| + | |||
| + | GRANT | ||
| + | postgres@hostname:~$ | ||
| + | |||
| + | Fix: | ||
| + | <nowiki>update pg_database set datallowconn = TRUE where datname = 'template0'; | ||
| + | \c template0 | ||
| + | update pg_database set datistemplate = FALSE where datname = 'template1'; | ||
| + | drop database template1; | ||
| + | create database template1 with template = template0 encoding = 'UTF8'; | ||
| + | update pg_database set datistemplate = TRUE where datname = 'template1'; | ||
| + | \c template1 | ||
| + | update pg_database set datallowconn = FALSE where datname = 'template0';</nowiki> | ||
Latest revision as of 19:19, 6 November 2024
Install[edit]
Debian/Ubuntu[edit]
sudo apt update sudo apt install postgresql postgresql-contrib
Data directory[edit]
/var/lib/postgresql
Remote access[edit]
1.- Modify pg_hba.conf to add Client Authentication Record
To allow remote access edit: /etc/postgresql/9.4/main/pg_hba.conf
sudo -i -u postgres -H nano /etc/postgresql/9.4/main/pg_hba.conf
Example:
TYPE DATABASE USER CIDR-ADDRESS METHOD # IPv4 local connections: host all all 127.0.0.1/32 md5 # IPv6 local connections: host all all ::1/128 md5
2.- Change the Listen Address in postgresql.conf
sudo -i -u postgres -H nano /etc/postgresql/9.4/main/postgresql.conf
set: listen_addresses = '*'
Crate users[edit]
From postgres shell account type:
createuser --interactive
To change the user password:
ALTER USER postgres WITH ENCRYPTED PASSWORD 'P@$$worD1';
Create database[edit]
From the postgres user shell:
createdb test1
CREATE TABLE / DROP TABLE[edit]
CREATE TABLE table_name (
column_name1 col_type (field_length) column_constraints,
column_name2 col_type (field_length),
column_name3 col_type (field_length)
);
DROP TABLE table_name;
Drop all tables[edit]
DO $$ DECLARE
r RECORD;
BEGIN
FOR r IN (SELECT tablename FROM pg_tables WHERE schemaname = 'public') LOOP
EXECUTE 'DROP TABLE IF EXISTS public.' || quote_ident(r.tablename) || ' CASCADE';
END LOOP;
END $$;
List users[edit]
\du
List databases[edit]
\list or \l
List tables[edit]
\d \dt
ADD, QUERY, DELETE from table[edit]
Add
INSERT INTO table_name (column_name1, column_name2, column_name3, column_name4)
VALUES ('value1', 'value2', 'value3', 'value4');
Query
SELECT * FROM table_name;
Delete
DELETE FROM table_name WHERE column_name = 'value1';
Update
UPDATE table_name SET column_name1= 'value32' WHERE column_name2 = 'value2';
ALTER TABLE[edit]
ALTER TABLE table_name ADD column_name5 date; ALTER TABLE table_name DROP column_name5;
Dump database[edit]
g_dump -C -h localhost -U scrapy scrapydb > scrapydb_dump.sql
Dump one database to another database[edit]
g_dump -C -h localhost -U scrapy scrapydb | psql -h ec2-54-77-228-53.eu-west-1.compute.amazonaws.com -U scrapy scrapydb
Import .sql dump file[edit]
psql databasename < data_base_dump pg_restore -h localhost -U postgres -d mapper -1 /tmp/mapper_before_refactoring_2018_11_13.sql
Error creating UTF-8 database[edit]
02:39:35: Error: ERROR: new encoding (UTF8) is incompatible with the encoding of the template database (SQL_ASCII) SUGERENCIA: Use the same encoding as in the template database, or use template0 as template.
Create user, database and password[edit]
- Create the user
postgres@hostname:~$ createuser
Enter name of role to add: username Shall the new role be a superuser? (y/n) n Shall the new role be allowed to create databases? (y/n) n Shall the new role be allowed to create more new roles? (y/n) n CREATE ROLE
- Create the DB
postgres@hostname:~$ createdb databasename
CREATE DATABASE postgres@hostname:~$
- Grant access for the user to the DB
postgres@hostname:~$ psql postgres=# alter user username with encrypted password 'password';
ALTER ROLE
postgres=# grant all privileges on database databasename to username;
GRANT postgres@hostname:~$
Fix:
update pg_database set datallowconn = TRUE where datname = 'template0'; \c template0 update pg_database set datistemplate = FALSE where datname = 'template1'; drop database template1; create database template1 with template = template0 encoding = 'UTF8'; update pg_database set datistemplate = TRUE where datname = 'template1'; \c template1 update pg_database set datallowconn = FALSE where datname = 'template0';