summaryrefslogtreecommitdiff
path: root/SQL/SQL. Базы Данных.md
blob: 48e9bc576da60cfa804f101c6a8979c26b85bc62 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
```sh
sudo apt install postgres
sudo apt install-contrib # Debian
sudo systemctl start posgresql.service
sudo systemctl status posgresql.service

sudo -u postgres createuser --interactive
# вводим имя
# даем права sudo

man createuser

sudo -u postgres createdb metall
sudo adduser metall
sudo -u metall psql

# переключиться на другую БД:
psql -d postgres
```
### Установка из исходников:
```sh
# качаем с сайта нужную версию:
# https://www.postgresql.org/ftp/source/v16.2/postgresql-16.2.tar.gz

mkdir Downloads
cd Downloads

# Качаем:
wget https://ftp.postgresql.org/pub/source/v16.2/postgresql-16.2.tar.gz
# Скачать скрипт и сразу выполнить:
wget -O - http://www.tecmint.com/wp-content/scripts/Colorfull.sh | bash
# Также можно использовать curl:
curl -O https://github.com/torvalds/linux/archive/v4.11-rc6.tar.gz

tar -xzvf postgresql-16.2.tar.gz
cd postgresql-16.2
./configure --prefix=/var/lib/postgresql

# Поиск пакетов в Linux:
sudo apt-cache search lib<пакет> # нужен пакет <name>-dev
sudo apt install <name>-dev

brew install pkg-config

./configure --prefix=/var/lib/postgresql
sudo make install-world
cd /var/lib/postgresql
sudo chown -R vlapa ../postgresql
./bin/pg_ctl initdb
export PGDATA=/var/lib/postgresql/main
./bin/pg_ctl initdb
./bin/pg_ctl -D /var/lib/postgresql/main start
./bin/psql -h localhost -U vlapa. postgres
# Создать БД:
CREATE DATABASE <name_db>

#===========================================================
# создадим конфигурацию перед сборкой. Для этого используем команду configure с тремя опциями:

# prefix — укажем каталог для установки PostgreSQL;
# libdir — укажем каталог с библиотеками PostgreSQL, это необходимо, так как PostgreSQL устанавливается в нестандартное расположение и не будет знать где ему искать библиотеки;
# with-pgport — укажем нестандартный порт на котором будет работать этот экземпляр PostgreSQL.

./configure --prefix=/home/alex/pgsql-16 --libdir=/home/alex/pgsql-16/lib/ --with-pgport=5555
mkdir ~/pgsql-16/data/
echo "export PGDATA=~/pgsql-16/data/" >> .bashrc
. .bashrc
ls -d $PGDATA

echo "export PGDATA=~/pgsql-16/data/" >> .bashrc
. .bashrc
whereis psql

initdb -k

pg_ctl -l ~/pgsql-16/postgres.log start # -l  -файл логов
pg_ctl status
psql -d postgres -c 'select now()'
pg_ctl stop
```

### Создание и запуск второго кластера
```sh
mkdir ~/pgsql-16/data2/
initdb -k -D ~/pgsql-16/data2/

pg_ctl -D /home/alex/pgsql-16/data2/ -l logfile start
# При инициализация кластера, если путь к каталогу PGDATA отличается от переменной $PGDATA или если такая переменная не задана. То нужно с помощью ключа -D указать путь к этому каталогу.

# Чтобы запустить второй кластер одновременно с первым, нужно поменять порт, на котором работает PostgreSQL. Изменим этот порт для второго кластера:
echo port = 5556 >> ~/pgsql-16/data2/postgresql.conf
pg_ctl -D ~/pgsql-16/data2/ -l ~/pgsql-16/data2/postgres.log start

ps ax | grep postgresql
# Первый кластер запущен без ключа -D и используется переменная $PGDATA, а во втором кластере путь к PGDATA прописан в строке запуска.
# Перед дальнейшей работой выключим оба кластера:
pg_ctl stop

pg_ctl -D /home/alex/pgsql-16/data2 stop
```

# 📑 Шпаргалка по основным командам PostgreSQL

Вся работа с PostgreSQL осуществляется под пользователем `postgres`

`$sudo su postgres`

Работать с `PosgreSQL` можно как в интерактивном режиме, так и из командной строки. Программа — `psql`

## Основные команды PostgreSQL в интерактивном режиме:

- `\connect db_name` – подключиться к базе с именем db_name
- `\du` – список пользователей
- `\dp` (или `\z`) – список таблиц, представлений, последовательностей, прав доступа к ним
- `\di` – индексы
- `\ds` – последовательности
- `\dt` – список таблиц
- `\dt+` — список всех таблиц с описанием
- `\dt *s*` — список всех таблиц, содержащих s в имени
- `\dv` – представления
- `\dS` – системные таблицы
- `\d+` – описание таблицы
- `\o` – пересылка результатов запроса в файл
- `\l` – список баз данных
- `\i` – читать входящие данные из файла
- `\e` – открывает текущее содержимое буфера запроса в редакторе (если иное не указано в окружении переменной _EDITOR_, то будет использоваться по умолчанию vi)
- `\d` “table_name” – описание таблицы
- `\i` запуск команды из внешнего файла, например \i /my/directory/my.sql
- `\pset` – команда настройки параметров форматирования
- `\echo` – выводит сообщение
- `\set` – устанавливает значение переменной среды. Без параметров выводит список текущих переменных (\unset – удаляет).
- `\?` – справочник psql
- `\help` – справочник SQL
- `\q` (или `Ctrl+D`) – выход с программы

## Удаленное подключение к Postgres:
- **postgresql.conf**
- **pg_hba.conf**
    
Вы можете найти эти два файла в папке:
- **/etc/postgresql/13/main** (Linux)
- **C:/Program Files/PostgreSQL/13/data** (Windows)




![[Снимок экрана 2024-03-14 в 13.21.49.png]]

![[Снимок экрана 2024-03-14 в 13.22.17.png]]


![[Снимок экрана 2024-03-14 в 13.25.59.png]]

![[Снимок экрана 2024-03-14 в 13.27.58.png]]


![[Снимок экрана 2024-03-14 в 13.29.48.png]]
![[Снимок экрана 2024-03-14 в 13.32.01.png]]

######################################################################

### Первичный ключ:

_должен быть:
- уникальным
- заполненным (not Null)
_бывают:
- простые
- составные
- естественные
- искусственные
-