Сообщения

Сообщения за октябрь, 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