summaryrefslogtreecommitdiff
path: root/MacOS/Postgresql.md
blob: 57b6bda70996fc90e6f0129908eacb7ec79dff7c (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
`brew install postgresql`

_В автозагрузку:_
`brew services start postgresql`

_Запуск вручную:_
`pg_ctl -D /usr/local/var/postgresql start`

_Перезагрузка:_
`brew services restart postgresql`

_Проверка версии:_
`brew info postgresql`

_Инициализация по умолчанию:_
`initdb --locale=C -E UTF-8 /opt/homebrew/var/postgresql@14`

_Экспортировать переменную:_
`export PATH=/opt/homebrew/bin:$PATH`

_Если автозагрузка не сработает, директория здесь:_
`~/Library/LaunchAgents`

_Создаем симлинк:_
`ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents`

_Добавляем в автозагрузку:_
`launchctl load ~/Library?LaunchAgents/homebrew.mxcl.postgresql.plist`

_Подключение к БД на MacOS (отличается от Linux). Проверяем пользователей:_
`psql -l`

![[Pasted image 20240312221215.png]]

_Для подключения указываем Owner из таблицы выше:_
`sudo psql -U vlapa -d postgres`

_Создаем пользователя с паролем (сначала подключаемся как описано выше):_
`CREATE USER ploshadka WITH PASSWORD '123456';`

_Назначаем ему кодировку:_
`ALTER ROLE ploshadka SET client_encoding TO 'utf8';`

_Создаем БД для русской локали, чтобы была возможность поиска:_
`CREATE DATABASE dbname TEMPLATE=template0 ENCODING 'UTF-8' LC_COLLATE 'ru_RU.UTF-8' LC_CTYPE 'ru_RU.UTF-8';`

_Назначаем этому пользователю новую БД:_
`GRANT ALL PRIVILEGES ON DATABASE dbname TO ploshadka;`

_проверим по таблице все-ли верно:_
`\list`

_Как подключиться (на localhost достаточно создать БД и подключиться к ней указав только имя):_
`dbname='stocks'`
_Остальное подхватится по умолчанию._

### Узнаем размер БД:

_Заходим на сервер в оболочку Postgres:_
`sudo psql -U vlapa -d postgres`

_Проверяем размер:_
`SELECT pg_size_pretty(pg_database_size('vlapa_db'));`

### Узнаем размеры таблиц:

_Находясь в оболочке Postgres входим в нужную БД:_
`\c vlapa_db`

_Вводим команду отсортировать таблицы по большему размеру:_
```bash
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;
```

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

_PostgreSQL  -  SQL команды:_

Как добавить колонку в правильное место:
```bash
alter table tablename rename to oldtable;  
create table tablename (column defs go here);
insert into tablename (col1, col2, col3) select col1, col2, col3 from oldtable;
```

_Как добавить колонку в конец:_
```sh
ALTER TABLE portfolio ADD COLUMN price_diff_open_current FLOAT NULL;
```

_Переименовать таблицу:_
```sh
alter table portfolio rename column lots to quantity;
```

_Обновить всю колонку одним значением:_
```sh
UPDATE operations SET user_id='1'
```

_Переименовать базу данных:_
```sh
alter database "stocks" rename to "captures";
```