Сообщения

Сообщения за 2021

SQL в PostgreSQL: оконные функции

Изображение
Оконная функция выполняет вычисление по набору строк таблицы, которые каким-то образом связаны с текущей строкой. Это сравнимо с типом расчета, который можно выполнить с помощью агрегатной функции. Однако оконные функции не заставляют строки группироваться в одну выходную строку, как это было бы при не оконных агрегатных вызовах. Вместо этого строки сохраняют свои отдельные идентификаторы. За кулисами оконная функция может получить доступ не только к текущей строке результата запроса. Вот пример, который показывает, как сравнить зарплату каждого сотрудника со средней зарплатой в его или ее отделе: SELECT depname, empno, salary, avg(salary) OVER (PARTITION BY depname) FROM empsalary; depname | empno | salary | avg -----------+-------+--------+----------------------- develop | 11 | 5200 | 5020.0000000000000000 develop | 7 | 4200 | 5020.0000000000000000 develop | 9 | 4500 | 5020.0000000000000000 develop | 8 | 6000

SQL в PostgreSQL: транзакции

Изображение
Транзакции - фундаментальная концепция всех систем баз данных. Существенным моментом транзакции является то, что она объединяет несколько шагов в одну операцию по принципу "все или ничего". Промежуточные состояния между шагами не видны другим параллельным транзакциям, и если произойдет какой-либо сбой, который препятствует завершению транзакции, то ни один из шагов не повлияет на базу данных вообще. Например, рассмотрим банковскую базу данных, которая содержит остатки по различным счетам клиентов, а также общие остатки по депозитам для филиалов. Предположим, мы хотим записать платеж в размере 100 долларов США со счета Алисы на счет Боба. Предельно упрощая, команды SQL для этого могут выглядеть так: UPDATE accounts SET balance = balance - 100.00 WHERE name = 'Alice'; UPDATE branches SET balance = balance - 100.00 WHERE name = (SELECT branch_name FROM accounts WHERE name = 'Alice'); UPDATE accounts SET balance = balance + 100.00 WHERE name = 

SQL в PostgreSQL: внешние ключи (Foreign Keys)

Изображение
По данным предыдущих постов . Рассмотрим следующую проблему: вы хотите убедиться, что никто не может вставлять строки в таблицу weather, для которых нет соответствующей записи в таблице cities. Это называется поддержанием ссылочной целостности ваших данных. В упрощенных системах баз данных это может быть реализовано (если вообще возможно), сначала просмотрев таблицу cities, чтобы проверить, существует ли соответствующая запись, а затем вставить или отклонить новые записи weather. Этот подход имеет ряд проблем и очень неудобен, поэтому PostgreSQL может сделать это за вас. Новое объявление таблиц будет выглядеть так: CREATE TABLE cities ( name varchar(80) primary key, location point ); CREATE TABLE weather ( city varchar(80) references cities(name), temp_lo int, temp_hi int, prcp real, date date ); Теперь попробуйте вставить недопустимую запись: INSERT INTO weather VALUES ('Berkeley', 45,

SQL в PostgreSQL: представления (Views)

Изображение
По данным предыдущих постов . Предположим, комбинированный список записей погоды и местоположения города представляет особый интерес для вашего приложения, но вы не хотите вводить запрос каждый раз, когда он вам нужен. Вы можете создать представление по запросу, которое дает имя запросу, на которое вы можете ссылаться как на обычную таблицу: CREATE VIEW myview AS SELECT name, temp_lo, temp_hi, prcp, date, location FROM weather, cities WHERE city = name; SELECT * FROM myview; Широкое использование представлений - ключевой аспект хорошего дизайна базы данных SQL. Представления позволяют вам инкапсулировать детали структуры ваших таблиц, которые могут меняться по мере развития вашего приложения, за согласованными интерфейсами. Представления можно использовать практически в любом месте, где можно использовать настоящую таблицу. Построение представлений на другие представления не редкость. Читайте также: SQL в PostgreSQL: концепции и создание таблиц SQ

SQL в PostgreSQL: объединение таблиц (JOIN)

Изображение
До сих пор наши запросы обращались только к одной таблице за раз. Запросы могут обращаться к нескольким таблицам одновременно или к одной и той же таблице таким образом, что одновременно обрабатываются несколько строк таблицы. Запросы, которые обращаются к нескольким таблицам (или нескольким экземплярам одной и той же таблицы) одновременно, называются join запросами. Они объединяют строки из одной таблицы со строками из второй таблицы с выражением, определяющим, какие строки должны быть объединены в пары. Например, чтобы вернуть все записи weather вместе с местоположением связанного города, базе данных необходимо сравнить столбец city в каждой строке таблицы weather со столбцом name всех строк в таблице cities и выбрать пары строки, в которых совпадают эти значения. Это можно сделать с помощью следующего запроса: SELECT * FROM weather JOIN cities ON city = name; city | temp_lo | temp_hi | prcp | date | name | location ---------------+---------+------

SQL в PostgreSQL: запрос к таблице

Изображение
Для получения данных из таблицы выполняется запрос к таблице. Для этого используется оператор SQL SELECT. Оператор разделен на список выбора (часть, в которой перечислены столбцы, которые должны быть возвращены), список таблиц (часть, в которой перечислены таблицы, из которых следует извлекать данные) и необязательную квалификацию (часть, которая определяет любые ограничения) . Например, чтобы получить все строки таблицы weather, введите: SELECT * FROM weather; Здесь * сокращенное обозначение "все столбцы". Таким образом, такой же результат будет с: SELECT city, temp_lo, temp_hi, prcp, date FROM weather; Результат должен быть (по данным, добавленным в предыдущем посте ): city | temp_lo | temp_hi | prcp | date ---------------+---------+---------+------+------------ San Francisco | 46 | 50 | 0.25 | 1994-11-27 San Francisco | 43 | 57 | 0 | 1994-11-29 Hayward | 37 | 54 | | 1994-11-29 (3 rows) Хотя S

SQL в PostgreSQL: заполнение таблицы строками

Изображение
Оператор INSERT используется для заполнения таблицы строками: INSERT INTO weather VALUES ('San Francisco', 46, 50, 0.25, '1994-11-27'); Обратите внимание, что все типы данных используют довольно очевидные форматы ввода. Константы, которые не являются простыми числовыми значениями, обычно должны быть заключены в одинарные кавычки ('), как в примере. Тип даты на самом деле довольно гибкий в том, что он принимает. Тип point требует ввода пары координат, как показано здесь: INSERT INTO cities VALUES ('San Francisco', '(-194.0, 53.0)'); Синтаксис, который использовался до сих пор, требует, чтобы вы запомнили порядок столбцов. Альтернативный синтаксис позволяет явно перечислить столбцы: INSERT INTO weather (city, temp_lo, temp_hi, prcp, date) VALUES ('San Francisco', 43, 57, 0.0, '1994-11-29'); Вы можете перечислить столбцы в другом порядке, если хотите, или даже опустить некоторые столбцы, например, если количеств

SQL в PostgreSQL: концепции и создание таблиц

Изображение
Концепции PostgreSQL - это система управления реляционными базами данных (СУБД). Это означает, что это система для управления данными, хранящимися в отношениях. Отношение - это, по сути, математический термин для обозначения таблицы. Идея хранения данных в таблицах сегодня настолько распространена, что может показаться очевидной по своей сути, но существует ряд других способов организации баз данных. Файлы и каталоги в Unix-подобных операционных системах образуют пример иерархической базы данных. Более современная разработка - объектно-ориентированная база данных. Каждая таблица представляет собой именованный набор строк. Каждая строка данной таблицы имеет одинаковый набор именованных столбцов, и каждый столбец имеет определенный тип данных. В то время как столбцы имеют фиксированный порядок в каждой строке, важно помнить, что SQL никоим образом не гарантирует порядок строк в таблице (хотя они могут быть явно отсортированы для отображения). Таблицы сгруппированы в базы данных, а наб

Доступ к базе данных PostgreSQL

Изображение
После того, как вы создали базу данных , вы можете получить к ней доступ: Запуск интерактивной программы терминала PostgreSQL, называемой psql, которая позволяет интерактивно вводить, редактировать и выполнять команды SQL. Использование существующего графического инструмента внешнего интерфейса, такого как pgAdmin, или офисного пакета с поддержкой ODBC или JDBC для создания и управления базой данных. Написание собственного приложения с использованием одной из нескольких доступных языковых привязок. Возможно, вы захотите запустить psql, чтобы попробовать примеры из этого поста. Его можно активировать для базы данных mydb, набрав команду: $ psql mydb Если вы не укажете имя базы данных, по умолчанию будет использоваться имя вашей учетной записи . В psql вас встретит следующее сообщение: psql (14.0) Type "help" for help. mydb=> Последняя строка также может быть: mydb=# Это будет означать, что вы являетесь суперпользователем базы данных, что, скорее

Создание базы данных PostgreSQL

Изображение
Первый тест, чтобы увидеть, можете ли вы получить доступ к серверу базы данных, - это попытаться создать базу данных. Работающий сервер PostgreSQL может управлять множеством баз данных. Обычно для каждого проекта или для каждого пользователя используется отдельная база данных. Чтобы создать новую базу данных, в этом примере с именем mydb, вы используете следующую команду: $ createdb mydb Если это не дает ответа, значит, этот шаг был успешным, и вы можете использовать созданную базу данных. Если вы видите сообщение, подобное: createdb: command not found значит PostgreSQL не был установлен должным образом. Либо он не был установлен вообще, либо путь поиска вашей оболочки не был настроен для его включения. Попробуйте вместо этого вызвать команду с абсолютным путем: $ /usr/local/pgsql/bin/createdb mydb Путь в вашем случае может быть другим. Обратитесь к администратору или ознакомьтесь с инструкциями по установке, чтобы исправить ситуацию. Другой ответ может быть так

Основы архитектуры PostgreSQL

Изображение
На жаргоне баз данных PostgreSQL использует модель клиент/сервер. Сессия PostgreSQL состоит из следующих взаимодействующих процессов (программ): Серверный процесс, который управляет файлами базы данных, принимает подключения к базе данных от клиентских приложений и выполняет действия с базой данных от имени клиентов. Программа сервера базы данных называется postgres. Клиентское (интерфейсное) приложение пользователя, которое хочет выполнять операции с базой данных. Клиентские приложения могут быть очень разнообразными по своей природе: клиент может быть текстовым инструментом, графическим приложением, веб-сервером, который обращается к базе данных для отображения веб-страниц, или специализированным инструментом обслуживания базы данных. Некоторые клиентские приложения поставляются с дистрибутивом PostgreSQL; большинство из них разрабатываются пользователями. Как типично для клиент-серверных приложений, клиент и сервер могут находиться на разных хостах. В этом случае они общаются ч

Модель согласованности данных Amazon S3

Изображение
Amazon S3 обеспечивает надежную согласованность операций чтения после записи для запросов PUT и DELETE объектов в вашей корзине Amazon S3 во всех регионах AWS. Это поведение применяется как к записи в новые объекты, так и к запросам PUT, которые перезаписывают существующие объекты, и к запросам DELETE. Кроме того, операции чтения в Amazon S3 Select, списках управления доступом (ACL) Amazon S3, тегах объектов Amazon S3 и метаданных объекта (например, объекта HEAD) строго согласованы. Обновления одного ключа атомарны. Например, если вы делаете запрос PUT к существующему ключу из одного потока и одновременно выполняете запрос GET для того же ключа из второго потока, вы получите либо старые данные, либо новые данные, но никогда не получите частичные или поврежденные данные. Amazon S3 обеспечивает высокую доступность за счет репликации данных на нескольких серверах в центрах обработки данных AWS. Если запрос PUT выполнен успешно, ваши данные будут надежно сохранены. Любое чтение (запрос G

Как работает Amazon S3

Изображение
Amazon S3 - это служба хранилища объектов, которая хранит данные в виде объектов в корзинах. Объект - это файл и любые метаданные, описывающие файл. Корзина (bucket) - это контейнер для предметов. Чтобы хранить данные в Amazon S3, вы сначала создаете корзину и указываете имя корзины и регион AWS. Затем вы загружаете свои данные в эту корзину как объекты в Amazon S3. У каждого объекта есть ключ (или имя ключа), который является уникальным идентификатором объекта в корзине. S3 предоставляет функции, которые вы можете настроить для поддержки вашего конкретного варианта использования. Например, вы можете использовать управление версиями S3, чтобы хранить несколько версий объекта в одной корзине, что позволяет восстанавливать объекты, которые были случайно удалены или перезаписаны. Корзины и объекты в них являются частными и доступны только в том случае, если вы явно предоставите разрешения на доступ. Для управления доступом можно использовать политики корзины, политики AWS Identity and

Что такое Amazon S3

Изображение
Amazon Simple Storage Service (Amazon S3) - это сервис объектного хранилища, который предлагает лучшую в отрасли масштабируемость, доступность данных, безопасность и производительность. Клиенты всех размеров и отраслей могут использовать Amazon S3 для хранения и защиты любого объема данных в различных сценариях использования, таких как озера данных, веб-сайты, мобильные приложения, резервное копирование и восстановление, архивирование, корпоративные приложения, устройства IoT и большие данные аналитики. Amazon S3 предоставляет функции управления, позволяющие оптимизировать, систематизировать и настраивать доступ к своим данным в соответствии с конкретными бизнес-требованиями, организационными и нормативными требованиями. Особенности Amazon S3 Классы хранения Amazon S3 предлагает ряд классов хранилищ, предназначенных для различных сценариев использования. Например, вы можете хранить критически важные производственные данные в S3 Standard для частого доступа, сократить расходы за сче

Средняя загрузка (load average, la)

Изображение
В вычислениях UNIX загрузка системы (system load) является мерой объема вычислительной работы, которую выполняет компьютерная система. Средняя загрузка (load average) представляет собой среднюю загрузку системы за период времени. Обычно она представлена в виде трех чисел, которые представляют нагрузку на систему в течение последних одно-, пяти- и пятнадцатиминутных периодов. Расчет нагрузки в стиле Unix Все Unix и Unix-подобные системы генерируют безразмерную метрику из трех load average чисел в ядре. Пользователи могут легко запросить текущий результат из оболочки Unix, выполнив команду uptime: $ uptime 14:34:03 up 10:43, 4 users, load average: 0.06, 0.11, 0.09 Команды w и top показывают те же три числа средней нагрузки, что и ряд утилит с графическим пользовательским интерфейсом. В Linux к ним также можно получить доступ, прочитав файл /proc/loadavg. Неактивный компьютер имеет число загрузки 0 (бездействующий процесс не учитывается). Каждый процесс, использующий ЦП или

Тип поля flattened в Elasticsearch

Изображение
По умолчанию каждое подполе в объекте отображается и индексируется отдельно. Если имена или типы подполей заранее не известны, они отображаются динамически. flattened тип предоставляет альтернативный подход, при котором весь объект отображается как одно поле. Для данного объекта плоское сопоставление (flattened mapping) проанализирует его конечные значения и проиндексирует их в одно поле как ключевые слова. Затем содержимое объекта можно искать с помощью простых запросов и агрегатов. Этот тип данных может быть полезен для индексирования объектов с большим или неизвестным количеством уникальных ключей. Для всего объекта JSON создается только одно сопоставление полей, что может помочь предотвратить взрыв сопоставлений из-за слишком большого количества сопоставлений отдельных полей. С другой стороны, плоские объектные поля представляют собой компромисс с точки зрения функциональности поиска. Разрешены только базовые запросы, без поддержки запросов числового диапазона или выделения. Т