Postgresql «описание таблицы»

DDL для управления коллекциями схем

В базе данных можно создавать коллекции схем XML и связывать их с переменными и столбцами типа xml . Для управления коллекциями схем в базе данных в SQL Server предусмотрены следующие инструкции DDL:

  • CREATE XML SCHEMA COLLECTION (Transact-SQL) импортирует компоненты схемы в базу данных.

  • ALTER XML SCHEMA COLLECTION (Transact-SQL) изменяет компоненты схемы в существующей коллекции схем XML.

  • DROP XML SCHEMA COLLECTION (Transact-SQL) полностью удаляет коллекцию схем XML и все ее компоненты.

Чтобы использовать коллекцию XML-схем и содержащиеся в ней схемы, следует сначала создать коллекцию и схемы с помощью инструкции CREATE XML SCHEMA COLLECTION. После создания коллекции схемы можно создавать переменные и столбцы типа xml и связывать с ними коллекцию схем

Обратите внимание, что после создания коллекции различные компоненты схем будут храниться в метаданных. Кроме того, добавлять большие компоненты в существующие схемы или новые схемы в существующую коллекцию можно с помощью инструкции ALTER XML SCHEMA COLLECTION

Удалить коллекцию схем можно с помощью инструкции DROP XML SCHEMA COLLECTION. При этом удаляются все схемы в коллекции и сам объект коллекции

Обратите внимание, что для удаления коллекции схем должны выполняться условия, описанные в разделе DROP XML SCHEMA COLLECTION (Transact-SQL)

Работа с большими строками (TOAST)

В PostgreSQL одна строка должна помещаться в одну страницу, то есть не быть больше 8 КБ. Чтобы поместить большую строку у PostgreSQL есть следующие стратегии:

  • сжать большие атрибуты;
  • вынести большие атрибуты в отдельную служебную TOAST таблицу;
  • можно объединить оба способа.

Механизм работы с большими строками называется – TOAST. Внешняя таблица в которую по кусочкам помещают длинную строку называют TOAST-таблица.

TOAST-таблица имеет собственную версионность. Например, хранится у вас в такой табличке фотография сотрудника. Вы изменяете сотруднику фамилию, появляется новая версия длинной строки, но фотография в новую версию не копируется. Фотография в TOAST табличке остаётся в той-же версии. Просто новая версия строки (из обычной таблички) ссылается на туже самую фотографию. Это экономит место на диске и увеличивает скорость работы.

Разделение и склеивание длинных строк PostgreSQL делает самостоятельно, то есть вам не нужно обо всем этом задумываться. Вы просто пишите запрос (SELECT), а PostgreSQL склеивает из нескольких частей длинную строку.

Но про них нужно знать. Так как длинные строки обрабатываются отдельно, то это замедляет работу базы данных, но только при запросах к длинному атрибуту, например к фотографии.

TOAST-таблица имеет свою схему pg_toast. А если это временная таблица, то pg_toast_temp_N.

Если в табличке есть поле с типом, куда может поместиться большое значение (numeric, text и т.д.), то TOAST-таблица создается сразу (как бы на всякий случай). Но до помещения больших атрибутов в TOAST-таблицу, она будет пустой.

Строки

Имя Описание Пример
varchar(n) Строка переменной длины, но не длиннее “n”. abc
char(n) Строка фиксированной длины, длинной “n”. abc
text Строка неограниченной и переменной длины. abcde
# CREATE TABLE text
(varchar varchar(5),
char char(3),
text text);

# INSERT INTO text (varchar, char, text) VALUES
('abc', 'abc', 'hello word'),
('abcde', 'abc', 'by-by');

# SELECT * FROM text;
 varchar | char |    text
---------+------+------------
 abc     | abc  | hello word
 abcde   | abc  | by-by
(2 rows)

В результате в varchar можно записать любую строку не более 5 символов, в char строка должна быть ровно 3 символа, а в text можем записать строку любой длины.

Дата и время

Имя Размер Описание Диапазон Точность Пример
timestamp 8 байт Дата и время от 4713 года до нашей эрыдо 294276 года нашей эры 1 микросекунда 2021-07-13 14:21:41
timestamptz 8 байт Дата и время с часовым поясом от 4713 года до нашей эрыдо 294276 года нашей эры 1 микросекунда 2021-07-13 14:21:41+03
date 4 байта Дата год-месяц-число от 4713 года до нашей эры до 5874897 года нашей эры 1 день 2021-07-13
time 8 байт Время от 00:00:00 до 24:00:00 1 микросекунда 14:21:41
# CREATE TABLE time
(timestamp timestamp,
timestamptz timestamptz,
date date,
time time);

# SELECT now();
              now
-------------------------------
 2021-07-13 14:21:41.406081+03

# INSERT INTO time (timestamp, timestamptz, date, time) VALUES
('2021-07-13 14:21:41', '2021-07-13 14:21:41 +03', '2021-07-13', '14:21:41');

# INSERT INTO time (timestamp, timestamptz, date, time) VALUES
(now(), now(), now(), now());

# SELECT * FROM time;
         timestamp          |          timestamptz          |    date    |      time
----------------------------+-------------------------------+------------+-----------------
 2021-07-13 14:21:41        | 2021-07-13 14:21:41+03        | 2021-07-13 | 14:21:41
 2021-07-13 14:29:43.235957 | 2021-07-13 14:29:43.235957+03 | 2021-07-13 | 14:29:43.235957
(3 rows)

Функция now() возвращает текущее время в формате timestamptz, но помещая вывод этой функции в различные типы данных, возвращаемое значение подстраивается под конкретный тип данных.

Пример 3

Еще один быстрый и простой способ дублировать таблицу — использовать оператор «AS TABLE» в команде CREATE TABLE PostgreSQL. В этом случае мы увидим, как этот запрос работает волшебным образом. Итак, мы открыли инструмент запроса по его значку. Затем мы должны написать в нем следующий запрос. Мы создали таблицу с именем «новая» как копию таблицы «test» с помощью предложения «AS TABLE» в нашем запросе. Попробуйте выполнить команду в области запроса оболочки командной строки PostgreSQL, чтобы увидеть результаты. Щелкните значок «Выполнить» на панели задач графического пользовательского интерфейса pgAdmin или нажмите клавишу «Ввод» на клавиатуре, если вы работаете в командной оболочке SQL для выполнения этого запроса. Вы увидите, что запрос работает правильно в соответствии с выводом, показанным в области вывода моментального снимка, например сообщениями. Это означает, что таблица «test» была успешно продублирована,

Вы можете увидеть вновь созданную таблицу «новая» в списке таблиц в базе данных Postgres.

После извлечения содержимого таблицы «новая» инструментом запроса с помощью команды SELECT он показывает те же данные, что и таблица «test» вместе со структурой, например, имена столбцов.

Пример 2

Пользователь также может создать дублирующую таблицу в PostgreSQL с помощью другой команды. Это дублирование будет выполнено без дублирования данных таблицы. Следовательно, мы будем использовать ключевое слово «no data» после оператора select в соответствии с приведенным ниже запросом. Запрос создавал новую таблицу с именем «duplicate» с помощью оператора CREATE TABLE и копировал структуру таблицы «test» с помощью оператора SELECT. Оператор «без данных» будет использоваться для предотвращения копирования данных из таблицы «test» в таблицу «duplicate». После выполнения запрос был успешным, как показано ниже, и таблица была успешно продублирована.

Создайте новую базу данных Postgres

Для того, чтобы создать новую базу данных Postgres, используйте команду createdb, как показано ниже.

Ниже команда создаст новую пользовательскую базу данных PostgreSQL под названием “andreyex”.

# createdb andreyex

Если команда createdb нет в вашей системе, или что-то пошло не так во время установки. Вы могли бы быть иметь в своей среде PATH.

При установке с помощью yum, эта команда будет в /usr/pgsql-X.Y/bin/createdb (где, XY это номер версии), с соответствующей ссылкой на /usr/bin. Таким образом, вы не будете иметь проблему здесь.

Но, если вы установили из исходных текстов, то вы можете убедиться, что каталог /usr/local/pgsql/bin/ находиться в вашей переменной PATH.

Кроме того, убедитесь, что вы создаете базу данных от пользователя, обладающего правами на создание базы данных. Если вы новичок в понятиях пользователей/роли в PostgreSQL, на данный момент, идти вперед и войдите в систему с правами администратора (при условии, что вы установили POSTGRESQL как root), и выполните команду createdb оттуда.

В следующем примере, мы создадим базу данных из Linux пользователя под названием “Maxim”, который не имеет соответствующего привилегию, чтобы создать новую базу данных.

$ createdb andreyex
createdb: could not connect to database template1: FATAL:  role "Maxim" does not exist

И, наконец, когда вы создаете новую базу данных, и если ваш сервер PostgreSQL не запущен, то вы получите следующее сообщение об ошибке “could not connect to database template1”.

# createdb andreyex
createdb: could not connect to database template1: could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

Примечание: Если вы создали базу данных по ошибке, вы можете удалить базу данных с помощью команды “dropdb”, как показано ниже.

# dropdb andreyex

Исходные данные

Давайте представим, что нам нужно создать две таблицы, первая – для хранения товаров, и вторая – для хранения категорий, к которым относятся эти товары.

Структура таблиц будет следующая:

  • goods – таблица будет содержать информацию о товарах:
    • product_id – идентификатор товара, данное значение должно автоматически генерироваться. Столбец не может содержать значения NULL и является первичным ключом;
    • product_name – наименование товара, столбец не может содержать значения NULL;
    • category – ссылка на категорию товара, столбец не может содержать значения NULL, но имеет значение по умолчанию, например, для случаев, когда товар еще не распределили в необходимую категорию, в этом случае товару будет присвоена категория по умолчанию («Не определена» или «Не указана»);
    • price – цена товара, столбец может содержать значения NULL, например, с ценой еще не определились.
  • categories — таблица будет содержать описание категорий товаров:
    • category_id – идентификатор категории, данное значение должно автоматически генерироваться. Столбец не может содержать значения NULL и является первичным ключом;
    • category_name – наименование категории, столбец не может содержать значения NULL.

При этом внести товар с несуществующей категорией нельзя, поэтому мы добавим еще и ограничение внешнего ключа.

Вставка записи в таблицу

Следующий шаг должен вставить некоторые записи сотрудников в таблицу сотрудников.

Синтаксис точно такое же, как и любой стандартный синтаксис SQL вставки.

Далее будет вставить 5 записей в таблицу сотрудников с заданными значениями для всех полей.

INSERT INTO employee VALUES (100,'Thomas','Sales',5500);
INSERT INTO employee VALUES (200,'Maxim','Technology',5600);
INSERT INTO employee VALUES (300,'Artem','Technology',7600);
INSERT INTO employee VALUES (400,'Andrey','Marketing',9200);
INSERT INTO employee VALUES (500,'Vasil','Technology',6100);

Порядок значений должен соответствовать порядку имен столбцов, которые вы видите в выводе команды “\d employee”, то есть в том же порядке, как вы создали таблицу.

Примечание
В приведенной выше вставке, хотя идентификатор может быть автоматически сгенерирован, мы указали значение идентификатора сотрудника (для столбца ID).

В следующем примере, мы можем вставить значения только в определенных столбцах таблицы сотрудников, указав имя столбца в скобках, как показано ниже.

В следующем примере мы вставим новую запись сотрудника только со значениями имен и столбцов.

andreyex=# INSERT INTO employee (name,dept) VALUES ('Oleg', 'Accounting');
INSERT 0 1

Если команда вставки выполнена успешно, то появится сообщение “INSERT 0 1”, как показано выше.

Результаты тестов

Этот тест показывает общее влияние различных размеров больших страниц. Первый набор тестов был создан с размером страницы по умолчанию в Linux 4 КБ без включения больших страниц

Обратите внимание, что прозрачные огромные страницы также были отключены и оставались отключенными на протяжении всех этих тестов.
Затем второй набор тестов был выполнен размером больших страниц в 2 MБ. Наконец, третий набор тестов выполняется с размером больших страниц 1 ГБ.
Все эти тесты были выполнены в PostgreSQL версии 11

Наборы включают в себя комбинацию разных размеров базы данных и клиентов. На приведенном ниже графике показаны сравнительные результаты производительности для этих тестов с TPS (транзакций в секунду) по оси Y, размером базы данных и количеством клиентов на размер базы данных по оси X.
Из приведенного выше графика видно, что прирост производительности с большими страницами увеличивается с увеличением количества клиентов и размера базы данных, если размер остается в предварительно выделенном буфере в разделяемой памяти (shared buffer).
Этот тест показывает TPS в сравнении с количеством клиентов. В этом случае размер базы данных составляет 48 ГБ. На оси Y у нас есть TPS, а на оси X у нас есть количество подключенных клиентов. Размер базы данных достаточно мал, чтобы поместиться в shared buffer, который установлен на 64 ГБ.
Если для больших страниц установлено значение 1 ГБ, то чем больше клиентов, тем выше сравнительный прирост производительности.
Следующий график такой же, как приведенный выше, за исключением размера базы данных 96 ГБ. Это превышает размер shared buffer, который установлен на 64 ГБ.
Ключевое наблюдение здесь заключается в том, что производительность с большими страницами, равными 1 ГБ, увеличивается по мере увеличения числа клиентов, и в конечном итоге она дает большую производительность, чем большие страницы в 2 МБ или стандартный размер страницы в 4 КБ.
Этот тест показывает TPS в зависимости от размера базы данных. В этом случае количество подключенных клиентов составляет 32. На оси Y у нас TPS, а на оси X — размеры базы данных.
Как и ожидалось, когда база данных выходит за пределы предварительно выделенных больших страниц, производительность значительно снижается.
 

Утилиты (программы) PosgreSQL:

  • createdb и dropdb – создание и удаление базы данных (соответственно)
  • createuser и dropuser – создание и пользователя (соответственно)
  • pg_ctl – программа предназначенная для решения общих задач управления (запуск, останов, настройка параметров и т.д.)
  • postmaster – многопользовательский серверный модуль PostgreSQL (настройка уровней отладки, портов, каталогов данных)
  • initdb – создание новых кластеров PostgreSQL
  • initlocation – программа для создания каталогов для вторичного хранения баз данных
  • vacuumdb – физическое и аналитическое сопровождение БД
  • pg_dump – архивация и восстановление данных
  • pg_dumpall – резервное копирование всего кластера PostgreSQL
  • pg_restore – восстановление БД из архивов (.tar, .tar.gz)

Примеры создания резервных копий:

Создание бекапа базы mydb, в сжатом виде

pg_dump -h localhost -p 5440 -U someuser -F c -b -v -f mydb.backup mydb

Создание бекапа базы mydb, в виде обычного текстового файла, включая команду для создания БД

pg_dump -h localhost -p 5432 -U someuser -C -F p -b -v -f mydb.backup mydb

Создание бекапа базы mydb, в сжатом виде, с таблицами которые содержат в имени payments

pg_dump -h localhost -p 5432 -U someuser -F c -b -v -t *payments* -f payment_tables.backup mydb

Дамп данных только одной, конкретной таблицы. Если нужно создать резервную копию нескольких таблиц, то имена этих таблиц перечисляются с помощью ключа -t для каждой таблицы.

pg_dump -a -t table_name -f file_name database_name

Создание резервной копии с сжатием в gz

pg_dump -h localhost -O -F p -c -U postgres mydb | gzip -c > mydb.gz

Список наиболее часто используемых опций:

  • -h host — хост, если не указан то используется localhost или значение из переменной окружения PGHOST.
  • -p port — порт, если не указан то используется 5432 или значение из переменной окружения PGPORT.
  • -u — пользователь, если не указан то используется текущий пользователь, также значение можно указать в переменной окружения PGUSER.
  • -a, —data-only — дамп только данных, по-умолчанию сохраняются данные и схема.
  • -b — включать в дамп большие объекты (blog’и).
  • -s, —schema-only — дамп только схемы.
  • -C, —create — добавляет команду для создания БД.
  • -c — добавляет команды для удаления (drop) объектов (таблиц, видов и т.д.).
  • -O — не добавлять команды для установки владельца объекта (таблиц, видов и т.д.).
  • -F, —format {c|t|p} — выходной формат дампа, custom, tar, или plain text.
  • -t, —table=TABLE — указываем определенную таблицу для дампа.
  • -v, —verbose — вывод подробной информации.
  • -D, —attribute-inserts — дамп используя команду INSERT с списком имен свойств.

Бекап всех баз данных используя команду pg_dumpall.

pg_dumpall > all.sql

Восстановление таблиц из резервных копий (бэкапов):

psql — восстановление бекапов, которые хранятся в обычном текстовом файле (plain text);
pg_restore — восстановление сжатых бекапов (tar);

Восстановление всего бекапа с игнорированием ошибок

psql -h localhost -U someuser -d dbname -f mydb.sql

Восстановление всего бекапа с остановкой на первой ошибке

psql -h localhost -U someuser —set ON_ERROR_STOP=on -f mydb.sql

Для восстановления из tar-арихива нам понадобиться сначала создать базу с помощью CREATE DATABASE mydb; (если при создании бекапа не была указана опция -C) и восстановить

pg_restore —dbname=mydb —jobs=4 —verbose mydb.backup

Восстановление резервной копии БД, сжатой gz

gunzip mydb.gz
psql -U postgres -d mydb -f mydb

Псевдо роль public

Псевдо роль public не видна, но про неё следует знать. Это групповая роль, в которую включены все остальные роли. Это означает, что все роли по умолчанию будут иметь привилегии наследуемые от public. Поэтому иногда у public отбирают некоторые привилегии, чтобы отнять их у всех пользователей.

Роль public по умолчанию имеет следующие привилегии:

  • для всех баз данных:
    • CONNECT – это означает что любая созданная роль сможет подключаться к базам данных, но не путайте с привилегией LOGIN;
    • TEMPORARY – любая созданная роль сможет создавать временные объекты во всех база данных и объекты эти могут быть любого размера;
  • для схемы public:
    • CREATE (создание объектов) – любая роль может создавать объекты в этой схеме;
    • USAGE (доступ к объектам) – любая роль может использовать объекты в этой схеме;
  • для схемы pg_catalog и information_schema

    USAGE (доступ к объектам) – любая роль может обращаться к таблицам системного каталога;

    :

  • для всех функций

    EXECUTE (выполнение) – любая роль может выполнять любую функцию. Ещё нужны ещё права USAGE на ту схему, в которой функция находится, и права к объектам к которым обращается функция.

    :

Это сделано для удобства, но снижает безопасность сервера баз данных.

Листинг баз данных

Вы можете подключиться к серверу PostgreSQL, используя psqlкоманду как любой системный пользователь. В зависимости от конфигурации сервера пользователю может потребоваться ввести свой пароль для подключения к терминалу psql. Чтобы получить доступ к терминалу psql от имени пользователя, в который вы вошли, просто введите psql.

Когда пакет PostgreSQL установлен, создается административный пользователь с именем «postgres». По умолчанию этот пользователь может подключиться к локальному серверу PostgreSQL без пароля.

Чтобы получить доступ к psqlтерминалу как пользователь «postgres», запустите:

sudo -u postgres psql

Команда sudo позволяет запускать команды в качестве другого пользователя.

Из терминала psql выполните мета-команду \l или \list, чтобы вывести список всех баз данных:

\l

 
Вывод будет включать количество баз данных, имя каждой базы данных, ее владельца, кодирование и привилегии доступа:

                              List of databases
   Name    |  Owner   | Encoding | Collate |  Ctype  |   Access privileges   
-----------+----------+----------+---------+---------+-----------------------
 odoo      | odoo     | UTF8     | C       | C.UTF-8 | 
 postgres  | postgres | UTF8     | C.UTF-8 | C.UTF-8 | 
 template0 | postgres | UTF8     | C.UTF-8 | C.UTF-8 | =c/postgres          +
           |          |          |         |         | postgres=CTc/postgres
 template1 | postgres | UTF8     | C.UTF-8 | C.UTF-8 | =c/postgres          +
           |          |          |         |         | postgres=CTc/postgres
(4 rows)

 
Сервер PostgreSQL имеет три базы данных, созданные по умолчанию: template0, template1 и postgres. Первые два – это шаблоны, которые используются при создании новых баз данных.

Если вы хотите получить информацию о размерах баз данных, табличных пространствах по умолчанию и описаниях, используйте \l+ или \list+. Размер базы данных будет показан, только если текущий пользователь может подключиться к нему.

Чтобы получить список всех баз данных без доступа к оболочке psql, используйте переключатель -c, как показано ниже:

sudo -u postgres psql -c "\l"

 
Другой способ составить список баз данных – использовать следующий оператор SQL:

SELECT datname FROM pg_database;

 
В отличие от мета-команды \l, приведенный выше запрос покажет только имена баз данных:

  datname  
-----------
 postgres
 odoo
 template1
 template0
(4 rows)

Мониторинг

  • Monitoring Database Activity

  • pgFouine — a PostgreSQL log analyzer

  • bucardo.org check_postgres — Perl cкрипт для мониторинга более 20 параметров, определяющих состояние СУБД PostgreSQL.

Текущую активность базы данных легко оценить с помощью команды ps, для вывода в реальном времени (с задержкой 1 секунда) можно использовать утилиту Команда watch с практическим примерами:

# watch -n 1 'ps auxww | grep ^postgres'
postgres 14164  0.0  0.0 188492  5296 ?        S    Dec13   0:46 /usr/bin/postmaster -p 5432 -D /var/lib/pgsql/data
postgres 14166  0.0  0.0 159904  1264 ?        Ss   Dec13   0:05 postgres: logger process                          
postgres 14168  0.0  0.1 188636 27208 ?        Ss   Dec13   0:49 postgres: writer process                          
postgres 14169  0.0  0.0 188492  1348 ?        Ss   Dec13   0:23 postgres: wal writer process                      
postgres 14170  0.0  0.0 188804  1752 ?        Ss   Dec13   0:17 postgres: autovacuum launcher process             
postgres 14171  0.0  0.0 160176  1468 ?        Ss   Dec13   0:45 postgres: stats collector process                 
postgres 21596  0.0  0.1 190228 30476 ?        Ss   Dec27   0:58 postgres: postgres mbill 127.0.0.1(37047) idle    
postgres 21597  0.0  0.0 189716  5672 ?        Ss   Dec27   0:00 postgres: postgres mbill 127.0.0.1(37048) idle

Так как для каждого клиента создаётся своя копия процесса postmaster, то это позволяет подсчитать число активных клиентов. Статусная строка даёт информацию о состоянии клиента. Фразы writer process, stats buffer process и stats collector process соответствуют системным процессам, запущенным самим PostgreSQL при старте. Пользовательские процессы имеют статусную строку вида:

postgres: «пользователь» «база» «хост» «статус»

«пользователь», «база» и «хост» соответствуют имени пользователя «пользователь» подсоединявшегося к базе «база» с компьютера «хост». «статус» может принимать следующие параметры:

  • idle — ожидание команды от клиента,
  • idle in transaction — ожидание команды от клиента внутри транзакции (между BEGIN и окончанием транзакции),
  • SQL- команда — выполняется эта команда, например, SELECT,
  • waiting — ждём когда разблокируется занятая другим процессом таблица. Для уточнения из-за чего возникла блокировка, нужно анализировать представление pg_locks.

Отчет по конфигурации: «Справочники, документы, регистры. Подсчет количества записей и переход в форму списка объекта» Промо

Отчет даёт моментальное представление о качественном и количественном заполнении базы данных по видам справочников, документов, регистров (накопления, бухгалтерии, сведений).
Отбор документов по периоду, по организации (при наличии такого реквизита). Авто установка фильтра по периоду, по организации при переходе в форму списка.
Отбор регистров по периоду (кроме непериодических регистров сведений), по организации (при наличии такого измерения). Авто установка фильтра по периоду, по организации при переходе в форму списка.
Дополнительный подсчёт количества справочников, документов по статусу «Помечен на удаление» в отчёте. Авто установка фильтра по статусу «Помечен» при переходе в форму списка.
Дополнительный подсчёт количества документов по статусу «Проведён / Не проведён». Авто установка фильтра по статусу «Проведён» при переходе в форму списка.
Двойной клик по ячейке отчёта выполняет переход в форму списка выбранного справочника, документа, регистра (накопления, бухгалтерии, сведений).

3 стартмани

Основные команды 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) – выход с программы

Кто уложил 1С, или мониторинг загрузки кластера в разрезе пользователей с помощью Grafana

Мониторингом различных параметров работы кластера 1С в zabbix сейчас уже никого не удивишь. Собственно потребление памяти, процов и места на серверах обычно настраивают первыми. Потом идет мониторинг в разрезе rphost’ов и различные метрики функционирования SQL сервера. Но вот когда уже все это есть, то временами возникает вопрос — какой же конкретно нехороший человек пытается съесть все (ну не все, но много) ресурсы сервера?

Можно смотреть в консоль кластера и ловить редиску там. Можно анализировать журнал регистраций, включать технологический журнал или накапливать статистку в специализированных базах 1С. Но, «настоящим» сисадминам проще как-то с внешними скриптами, базами данных и, например, Grafana. Расскажу что у нас получилось.

1 стартмани

02.09.2019   
14166   
32   
DonAlPatino   

26
   

Числовые типы

Имя Размер Описание Диапазон Пример
integer 2 байта Отрицательное или положительное целое число. от -2147483648 до +2147483647 516
numeric(m, n) переменный Вещественное число с фиксированной точностью. Точность для этого типа настраиваемая, это значит, что её можно указать с помощью точности (m) и масштаба (n). Точность – общее количество цифр, масштаб – количество цифр после запятой.Например число 468,45 – NUMERIC(5, 2). Можно задать только точность, например NUMERIC(3), тогда масштаб станет равен 0. На самом деле точность и масштаб можно не задавать. В таком случае можно будет сохранить число с любой точностью и масштабом в рамках ограничений. Этот тип применяется для чисел, где важна точность, например для хранения денежных сумм. 131072 цифр до точки 16383 цифр после точки 12,12958
real 4 байта Число с плавающей точкой. Как следствие точность меньше чем у numeric, зато вычисления происходят быстрее. 6 цифр после точки 56,13
serial 4 байта Целое число из последовательности, то есть оно автоматически увеличивается для каждой новой строки. Проще говоря, создавая этот тип для столбца, вам не нужно придумывать значения в нём. Так как за вас это сделает система. Этот тип гарантирует уникальность в рамках диапазона. от 1 до 2147483647 50
money 8 байт Тип для хранения денежной суммы. от -92233720368547​758.08до +92233720368547​758.07 100,50
# CREATE TABLE test
(integer integer,
numeric numeric(4,3),
real real,
serial serial,
money money);

# INSERT INTO test (integer, numeric, real, money) VALUES
(123, 1.343, 1233.2, 245.65);
INSERT 0 1

# SELECT * FROM test;
 integer | numeric |  real  | serial |  money
---------+---------+--------+--------+----------
     123 |   1.343 | 1233.2 |      1 | 245,65 ₽
(1 row)

Из вывода выше стоит отметить, что в примере выше мы не вставляли значение в колонку serial, система это проделала за нас. А также в колонке money при выводе мы видим знак денежной единицы.

Комментарии

Метод GetSchemaTable возвращает метаданные о каждом столбце в следующем порядке:

Столбец DataReader Описание
ColumnName Имя столбца в том виде, в котором оно отображается в DataTable .
ColumnOrdinal Порядковый номер столбца
ColumnSize значение-1 ColumnSize , если свойство (или MaxLength ) DataColumn не может быть определено или не является релевантным; в противном случае — 0 или положительное целое число, содержащее значение.
NumericPrecision Если типом столбца является числовой тип, это максимальная точность столбца. Если тип столбца не является числовым типом данных, это значение равно null.
NumericScale Если тип данных столбца имеет компонент масштабирования, возвращается число цифр справа от десятичной запятой. В противном случае возвращается значение null.
DataType Базовый тип столбца.
ProviderType Признак типа данных столбца. Если тип данных столбца отличается от строки к строке, это значение равно Object . Этот столбец не может содержать значение NULL.
IsLong значение, если столбец имеет тип данных String , а его MaxLength свойство имеет значение-1. В противном случае — значение .
AllowDBNull значение, если для столбца задано ограничение AllowDbNull, равное true. в противном случае — .
IsReadOnly значение, если столбец не может быть изменен; в противном случае — значение .
IsRowVersion для каждого столбца.
IsUnique : Ни одна из двух строк в не DataTable может иметь одинаковое значение в этом столбце. гарантированно будет иметь значение true, если столбец представляет ключ самостоятельно или если существует ограничение типа UNIQUE, которое применяется только к этому столбцу. : Столбец может содержать дублирующиеся значения в . По умолчанию этот столбец имеет значение .
IsKey : Столбец является одним из набора столбцов, которые вместе однозначно идентифицируют строку в DataTable . Набор столбцов с параметром, равным, должен однозначно идентифицировать строку в . Нет необходимости, чтобы этот набор столбцов являлся минимальным. Этот набор столбцов может быть создан из первичного ключа, уникального ограничения или уникального индекса. : Столбец не требуется для уникальной идентификации строки. Это значение равно, Если столбец участвует в одном или составном первичном ключе. В противном случае его значение равно .
IsAutoIncrement : Столбец присваивает значения новым строкам с фиксированным приращением. : Столбец не присваивает значения новым строкам с фиксированным приращением. По умолчанию этот столбец имеет значение .
BaseCatalogName Имя каталога в хранилище данных, содержащем столбец. значение, если невозможно определить базовое имя каталога. Значением по умолчанию для этого столбца является значение.
BaseSchemaName Это значение всегда равно .
BaseTableName Имя DataTable.
BaseColumnName Имя столбца в DataTable .
аутоинкрементсид Значение DataTable AutoIncrementSeed Свойства.
аутоинкрементстеп Значение DataTable AutoIncrementStep Свойства.
DefaultValue Значение DataColumn DefaultValue Свойства.
Expression Строка выражения, если текущий столбец является столбцом выражения, а все столбцы, используемые в выражении, принадлежат к тому же , что содержат столбец выражения. в противном случае — значение .
ColumnMapping MappingTypeЗначение, связанное с DataColumn . Тип может быть одним из , , или . Значение по умолчанию — .
басетабленамеспаце Значение DataTable Namespace Свойства.
басеколумннамеспаце Значение DataColumn Namespace Свойства.

Уникальный идентификатор

Имя Описание Пример
uuid 128-битное значение, генерируемое специальным алгоритмом, практически гарантирующим, что этим же алгоритмом оно не будет получено больше нигде в мире. Записывается в виде 32 шестнадцатеричных цифр, разделённых на несколько групп.  a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11
# CREATE TABLE uid
(uid uuid, name varchar(15));

# INSERT INTO uid (uid, name) VALUES
(gen_random_uuid (), 'alex'), (gen_random_uuid (), 'bob'), (gen_random_uuid (), 'max');

# SELECT * FROM uid;
                 uid                  | name
--------------------------------------+------
 650d3f16-c81c-4bbb-83a8-1964a6d2912e | alex
 7eb5cf8e-9755-48b3-8e66-753a09c6a7ed | bob
 b7837e0a-3519-4812-89f1-c7a9784406a3 | max
(3 rows)

Функция gen_random_uuid () предназначена для генерирования уникального uuid. Хотя есть мизерная вероятность что будет сгенерирован неуникальный uuid.

Существуют и другие типы, например для хранения двоичных данных, json, массивов, xml и другой информации. Но так как я их не применял, то и описывать пока не буду.

Сводка

Имя статьи
Типы данных PostgreSQL

Описание
В PostgreSQL важно знать про типы данных. Каждая колонка в таблице имеет свой тип и может хранить только данные определенного типа

Рассмотрим основные типы

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: