Миграция кода с Oracle на PostgreSQL: особенности и пути обхода, средства конвертации, вспомогательные модули
Эта статья завершает цикл о миграции с СУБД Oracle на СУБД PostgreSQL. В первых двух статьях рассматривались вопросы и устоявшиеся способы переноса данных из одной СУБД в другую (часть 1, часть 2). В третьей статье представлена часть особенностей, которые нужно учесть при переводе хранимого кода с PL/SQL на PL/pgSQL. В сегодняшнем материале рассматриваются:
- Оставшаяся часть особенностей.
- Адаптация и конвертация кода .
- Выбор средств для конвертации кода.
➡️ Читать дальше
@sqlhub
Эта статья завершает цикл о миграции с СУБД Oracle на СУБД PostgreSQL. В первых двух статьях рассматривались вопросы и устоявшиеся способы переноса данных из одной СУБД в другую (часть 1, часть 2). В третьей статье представлена часть особенностей, которые нужно учесть при переводе хранимого кода с PL/SQL на PL/pgSQL. В сегодняшнем материале рассматриваются:
- Оставшаяся часть особенностей.
- Адаптация и конвертация кода .
- Выбор средств для конвертации кода.
➡️ Читать дальше
@sqlhub
👍6
🔥 Полезнейшая Подборка каналов
🦾 Machine learning
@ai_machinelearning_big_data – все о машинном обучении
@data_analysis_ml – все о анализе данных.
@machinelearning_ru – машинное обучении на русском от новичка до профессионала.
@machinelearning_interview – подготовка к собеседования Data Science
@datascienceiot – бесплатные книги Machine learning
@ArtificialIntelligencedl – канал о искусственном интеллекте
@neural – все о нейронных сетях
@machinee_learning – чат о машинном обучении
@datascienceml_jobs - работа ds, ml
🐍 Python
@pythonl – python для датасаентиста
@pro_python_code – python на русском
@python_job_interview – подготовка к Python собеседованию
@python_testit тесты на python
@pythonlbooks - книги Python
@Django_pythonl django
@python_djangojobs - работа Python
☕️ Java
@javatg - Java для програмистов
@javachats Java чат
@java_library - книги Java
@android_its Android разработка
@java_quizes - тесты Java
@Java_workit - работа Java
@progersit - шпаргалки ит
💡 Javascript / front
@javascriptv - javascript изучение
@about_javascript - javascript продвинутый
@JavaScript_testit -тесты JS
@htmlcssjavas - web
@hashdev - web разработка
🦫 Golang
@golang_interview - вопросы и ответы с собеседований по Go. Для всех уровней разработчиков.
@Golang_google - go для разработчиков
@golangtests - тесты и задачи GO
@golangl - чат Golang
@GolangJobsit - вакансии и работа GO
@golang_jobsgo - чат вакансий
@golang_books - книги Golang
@golang_speak - обсуждение задач Go
🐧 Linux
@inux_kal - чат kali linux
@inuxkalii - linux kali
@linux_read - книги linux
👷♂️ IT работа
@hr_itwork - ит-ваканнсии
🔋 SQL
@sqlhub - базы данных
@chat_sql - базы данных чат
🤡It memes
@memes_prog - ит-мемы
⚙️ Rust
@rust_code - язык программирования rust
@rust_chats - чат rust
#️⃣ c# c++
@csharp_ci - c# c++кодинг
@csharp_cplus чат
🦾 Machine learning
@ai_machinelearning_big_data – все о машинном обучении
@data_analysis_ml – все о анализе данных.
@machinelearning_ru – машинное обучении на русском от новичка до профессионала.
@machinelearning_interview – подготовка к собеседования Data Science
@datascienceiot – бесплатные книги Machine learning
@ArtificialIntelligencedl – канал о искусственном интеллекте
@neural – все о нейронных сетях
@machinee_learning – чат о машинном обучении
@datascienceml_jobs - работа ds, ml
🐍 Python
@pythonl – python для датасаентиста
@pro_python_code – python на русском
@python_job_interview – подготовка к Python собеседованию
@python_testit тесты на python
@pythonlbooks - книги Python
@Django_pythonl django
@python_djangojobs - работа Python
☕️ Java
@javatg - Java для програмистов
@javachats Java чат
@java_library - книги Java
@android_its Android разработка
@java_quizes - тесты Java
@Java_workit - работа Java
@progersit - шпаргалки ит
💡 Javascript / front
@javascriptv - javascript изучение
@about_javascript - javascript продвинутый
@JavaScript_testit -тесты JS
@htmlcssjavas - web
@hashdev - web разработка
🦫 Golang
@golang_interview - вопросы и ответы с собеседований по Go. Для всех уровней разработчиков.
@Golang_google - go для разработчиков
@golangtests - тесты и задачи GO
@golangl - чат Golang
@GolangJobsit - вакансии и работа GO
@golang_jobsgo - чат вакансий
@golang_books - книги Golang
@golang_speak - обсуждение задач Go
🐧 Linux
@inux_kal - чат kali linux
@inuxkalii - linux kali
@linux_read - книги linux
👷♂️ IT работа
@hr_itwork - ит-ваканнсии
🔋 SQL
@sqlhub - базы данных
@chat_sql - базы данных чат
🤡It memes
@memes_prog - ит-мемы
⚙️ Rust
@rust_code - язык программирования rust
@rust_chats - чат rust
#️⃣ c# c++
@csharp_ci - c# c++кодинг
@csharp_cplus чат
👍6
💡 Оператор PIVOT
Несколько статей будут посвящены тому как в SQL Server реализован оператор PIVOT и UNPIVOT. Начнем с оператора PIVOT. Оператор PIVOT берет нормализованную таблицу и преобразует ее в другой вид, в котором столбцы результирующей таблицы получаются из значений исходной таблицы. Например, предположим, что мы хотим хранить данные о суммарной выручке от продаж за год по каждому из сотрудников.
➡️ Читать дальше
@sqlhub
Несколько статей будут посвящены тому как в SQL Server реализован оператор PIVOT и UNPIVOT. Начнем с оператора PIVOT. Оператор PIVOT берет нормализованную таблицу и преобразует ее в другой вид, в котором столбцы результирующей таблицы получаются из значений исходной таблицы. Например, предположим, что мы хотим хранить данные о суммарной выручке от продаж за год по каждому из сотрудников.
➡️ Читать дальше
@sqlhub
👍12🔥1
Поменять местами соседние записи
В таблице seat хранятся имена учеников и сведениях об их местах в классе.
Напишите MySQL запрос, который поменяет местами соседних учеников.
Если количество учеников нечётное — последнего ученика никуда пересаживать не надо.
Исходная таблица:
id student
1 Abbot
2 Doris
3 Emerson
4 Green
5 Jeames
Что должно получиться:
id student
1 Doris
2 Abbot
3 Green
4 Emerson
5 Jeames
Решение
SELECT
CASE
WHEN ((SELECT MAX(id) FROM seat)%2 = 1) AND id = (SELECT MAX(id) FROM seat) THEN id
WHEN id%2 = 1 THEN id + 1
ELSE id - 1
END AS id, student
FROM seat
ORDER BY id;
@sqlhub
В таблице seat хранятся имена учеников и сведениях об их местах в классе.
Напишите MySQL запрос, который поменяет местами соседних учеников.
Если количество учеников нечётное — последнего ученика никуда пересаживать не надо.
Исходная таблица:
id student
1 Abbot
2 Doris
3 Emerson
4 Green
5 Jeames
Что должно получиться:
id student
1 Doris
2 Abbot
3 Green
4 Emerson
5 Jeames
Решение
SELECT
CASE
WHEN ((SELECT MAX(id) FROM seat)%2 = 1) AND id = (SELECT MAX(id) FROM seat) THEN id
WHEN id%2 = 1 THEN id + 1
ELSE id - 1
END AS id, student
FROM seat
ORDER BY id;
@sqlhub
👍17🤔1
Трюк дня. Возвратить 0 для функции
Перепишите запрос так, чтобы он возвратил 0, если для функции SUM не найдено ни одного значения, кроме
И возвратил сумму, если значения найдены.
#tips
SUM
если не найдено ни одного значения в MySQL Перепишите запрос так, чтобы он возвратил 0, если для функции SUM не найдено ни одного значения, кроме
NULLs
. И возвратил сумму, если значения найдены.
SELECT SUM (column_1)
FROM table
WHERE column_2 = ‘Test‘;
Решение будет вечером. #tips
👍11
В чем разница между функциями
Единственная разница между функциями
В таких случаях
Тогда как
Например, рассмотрим набор
Для такого набора RANK() вернет
@sqlhub
RANK()
и DENSE_RANK()
? Единственная разница между функциями
RANK()
и DENSE_RANK()
заключается в случаях, когда несколько значений в наборе имеют одинаковый ранг. В таких случаях
RANK()
будет назначать непоследовательные «ранги» значениям в наборе.Тогда как
DENSE_RANK()
будет назначать последовательные ранги значениям в наборе.Например, рассмотрим набор
{25, 25, 50, 75, 75, 100}
. Для такого набора RANK() вернет
{1, 1, 3, 4, 4, 6}
(обратите внимание, что значения 2 и 5 пропущены), тогда как DENSE_RANK()
вернет {1, 1, 2, 3, 3, 4}
.
#вопросы #собеседование@sqlhub
👍20
Функция overlay (Databricks SQL)
Заменяет input на replace, который начинается с pos и имеет длину len.
Синтаксис
Копировать
overlay(input, replace, pos[, len])
Копировать
overlay(input PLACING replace FROM pos [FOR len])
Аргументы
input: выражение STRING или BINARY.
replace: выражение того же типа, что и input.
pos: выражение INTEGER.
len: необязательное выражение INTEGER.
Возвращаемое значение
Тип результата соответствует типу input.
Если pos имеет отрицательное значение, отсчет положения начинается с конца. len должно быть иметь значение не меньше 0. len задает длину фрагмента в input, который будет заменен. По умолчанию len имеет значение, совпадающее с длиной replace.
Примеры
SQL
@sqlhub
Заменяет input на replace, который начинается с pos и имеет длину len.
Синтаксис
Копировать
overlay(input, replace, pos[, len])
Копировать
overlay(input PLACING replace FROM pos [FOR len])
Аргументы
input: выражение STRING или BINARY.
replace: выражение того же типа, что и input.
pos: выражение INTEGER.
len: необязательное выражение INTEGER.
Возвращаемое значение
Тип результата соответствует типу input.
Если pos имеет отрицательное значение, отсчет положения начинается с конца. len должно быть иметь значение не меньше 0. len задает длину фрагмента в input, который будет заменен. По умолчанию len имеет значение, совпадающее с длиной replace.
Примеры
SQL
> SELECT overlay('Spark SQL', 'ANSI ', 7, 0);
Spark ANSI SQL
> SELECT overlay('Spark SQL' PLACING '_' FROM 6);
Spark_SQL
> SELECT overlay('Spark SQL' PLACING 'CORE' FROM 7);
Spark CORE
> SELECT overlay('Spark SQL' PLACING 'ANSI ' FROM 7 FOR 0);
Spark ANSI SQL
> SELECT overlay('Spark SQL' PLACING 'tructured' FROM 2 FOR 4);
Structured SQL
> SELECT overlay(encode('Spark SQL', 'utf-8') PLACING encode('_', 'utf-8') FROM 6);
[53 70 61 72 6B 5F 53 51 4C]
@sqlhub
👍6
PostgreSQL. Основы языка SQL
В пособии рассматриваются следующие темы:
- Введение в базы данных и SQL
- Создание рабочей среды
- Основные операции с таблицами
- Типы данных СУБД PostgreSQL
- Основы языка определения данных
- Запросы
- Изменение данных
- Индексы
- Транзакции
- Повышение производительности
📓 Книга
@sqlhub
В пособии рассматриваются следующие темы:
- Введение в базы данных и SQL
- Создание рабочей среды
- Основные операции с таблицами
- Типы данных СУБД PostgreSQL
- Основы языка определения данных
- Запросы
- Изменение данных
- Индексы
- Транзакции
- Повышение производительности
📓 Книга
@sqlhub
👍9❤2🥰1😁1
🏄♀️ 5 примеров атаки SQL-инъекций и их предотвращение
Эта атака позволяет хакерам выполнять вредоносные действия в онлайн-свойствах, где проверка входных данных немного ниже среднего.
Согласно отчету Positive Technology, SQL-инъекция по-прежнему остается одной из основных лазеек в мире.
➡️ Читать дальше
@sqlhub
Эта атака позволяет хакерам выполнять вредоносные действия в онлайн-свойствах, где проверка входных данных немного ниже среднего.
Согласно отчету Positive Technology, SQL-инъекция по-прежнему остается одной из основных лазеек в мире.
➡️ Читать дальше
@sqlhub
👍7❤2🔥1
Выберите пример правильно составленного запроса с использованием агрегирующей функции SUM:
Anonymous Quiz
64%
select sum(price) from Orders;
10%
select sum(price), customer_name from Orders;
8%
select * from Orders where price=sum();
18%
select sum() from Orders group by price desc;
❤6👍4🤯3🔥1
Как хранить сеть дорог в БД для построения маршрута?
И так, формулировка задачи следующая: есть база данных, в ней хранится информация о дорогах, включая координаты, нужно реализовать построение маршрутов из начальной точки к конечной.
Построение маршрутов - задача распространенная, и, как для каждой распространённой задачи, для неё давно существуют реализации. Мне нравится GraphHopper. Да так нравится, что моя первая статья на Хабре была про то, как создать для него собственные правила построения графа дорог.
➡️ Читать дальше
@sqlhub
И так, формулировка задачи следующая: есть база данных, в ней хранится информация о дорогах, включая координаты, нужно реализовать построение маршрутов из начальной точки к конечной.
Построение маршрутов - задача распространенная, и, как для каждой распространённой задачи, для неё давно существуют реализации. Мне нравится GraphHopper. Да так нравится, что моя первая статья на Хабре была про то, как создать для него собственные правила построения графа дорог.
➡️ Читать дальше
@sqlhub
👍10❤2🔥1
✔️ Как прокачать свой SQL до уровня больших данных
Чем отличается SQL в больших данных от обычного SQL? В больших данных используются распределённые вычисления.
Вычисления распределяются между несколькими серверами. Одна база данных находится сразу на нескольких серверах. Результат запроса тоже вычисляется одновременно несколькими серверами. Алгоритмы распределённых вычислений описывает парадигма MapReduce. Давайте разберём, на что это влияет и как прокачать свой SQL до уровня больших данных.
Предупреждение: в данной статье рассматриваются канонические архитектуры обработки данных. Многие современные СУБД и фреймворки построены на их основе и содержат в себе множество доработок и улучшений. Однако набор оптимизаций может отличаться. Поэтому реальная обработка данных на вашем проекте может отличаться в лучшую сторону благодаря именно вашему инструменту. Важно понимать, какие именно оптимизации способен выполнять ваш фреймворк, чтобы правильно контролировать эффективность алгоритмов.
➡️ Читать дальше
@sqlhub
Чем отличается SQL в больших данных от обычного SQL? В больших данных используются распределённые вычисления.
Вычисления распределяются между несколькими серверами. Одна база данных находится сразу на нескольких серверах. Результат запроса тоже вычисляется одновременно несколькими серверами. Алгоритмы распределённых вычислений описывает парадигма MapReduce. Давайте разберём, на что это влияет и как прокачать свой SQL до уровня больших данных.
Предупреждение: в данной статье рассматриваются канонические архитектуры обработки данных. Многие современные СУБД и фреймворки построены на их основе и содержат в себе множество доработок и улучшений. Однако набор оптимизаций может отличаться. Поэтому реальная обработка данных на вашем проекте может отличаться в лучшую сторону благодаря именно вашему инструменту. Важно понимать, какие именно оптимизации способен выполнять ваш фреймворк, чтобы правильно контролировать эффективность алгоритмов.
➡️ Читать дальше
@sqlhub
👍8❤1🔥1
English for Developers - канал для тех, кто хочет учить технический английский. От создатателей популярного ит-канала Data analysis.
1. техническая лексика
2. опросы на английском
3. шутки на английском
Подписывайтесь, проходите опросы, читайте полезные прогерские фразы на английском: english_forprogrammers.
1 канал вместо тысячи учебников и курсов
1. техническая лексика
2. опросы на английском
3. шутки на английском
Подписывайтесь, проходите опросы, читайте полезные прогерские фразы на английском: english_forprogrammers.
1 канал вместо тысячи учебников и курсов
👍5❤1🔥1
🔥 Эффективные SQL-запросы. 12 способов переписать запросы SQL для улучшения их производительности.
Я часто работаю в условиях, когда при настройке производительности нет возможности менять индексы или параметры сервера. Я обычно сталкиваюсь с подобными сценариями, когда имею дело с:
Базами данных поставщиков.
“Хрупкими” системами.
Недостаточным местом на диске.
Ограниченным инструментарием/непосредственным анализом.
Возможностями, ограниченными системой безопасности.
Хотя всегда предпочтительней решать проблему производительности в корне, иногда единственным способом, которым я могу воспользоваться для решения проблемы в подобных условиях, является переписывание запросов.
Я решил написать этот краткий пост, потому что хотел бы изначально иметь такой ресурс. Иногда, возможно, в попытках найти способ переписать SQL-запрос данный пост даст толчок вашим творческим идеям.
➡️ Читать дальше
@sqlhub
Я часто работаю в условиях, когда при настройке производительности нет возможности менять индексы или параметры сервера. Я обычно сталкиваюсь с подобными сценариями, когда имею дело с:
Базами данных поставщиков.
“Хрупкими” системами.
Недостаточным местом на диске.
Ограниченным инструментарием/непосредственным анализом.
Возможностями, ограниченными системой безопасности.
Хотя всегда предпочтительней решать проблему производительности в корне, иногда единственным способом, которым я могу воспользоваться для решения проблемы в подобных условиях, является переписывание запросов.
Я решил написать этот краткий пост, потому что хотел бы изначально иметь такой ресурс. Иногда, возможно, в попытках найти способ переписать SQL-запрос данный пост даст толчок вашим творческим идеям.
➡️ Читать дальше
@sqlhub
👍8❤1🔥1
💻 Типы таблиц в PostgreSQL: clustered, foreign, partitioned и inherited tables
В статье речь пойдёт про кластеризованные, внешние, партицированные и наследуемые таблицы. Посмотрим на примеры их создания, области применения, плюсы и минусы их использования.
Clustered tables — кластеризованные таблицы
Мало кто любит хаос, всем нравится порядок. В рамках реляционных баз данных понятие хаоса тесно переплетено с хранением информации, потому что на протяжении своего жизненного цикла таблица постоянно видоизменяется.
В процессе работы с РСУБД на уровне диска происходит постоянное изменение содержимого таблицы. Например, вы обновили данные и ваша обновлённая строка попала на другую страницу таблицы (тут надо оговориться про FILLFACTOR) с появлением мёртвой записи (dead tuple) в текущей позиции. Затем autovacuum-процесс удалил мёртвую запись, и освободившийся слот заполнился вновь поступившей строкой.
➡️ Читать дальше
@sqlhub
В статье речь пойдёт про кластеризованные, внешние, партицированные и наследуемые таблицы. Посмотрим на примеры их создания, области применения, плюсы и минусы их использования.
Clustered tables — кластеризованные таблицы
Мало кто любит хаос, всем нравится порядок. В рамках реляционных баз данных понятие хаоса тесно переплетено с хранением информации, потому что на протяжении своего жизненного цикла таблица постоянно видоизменяется.
В процессе работы с РСУБД на уровне диска происходит постоянное изменение содержимого таблицы. Например, вы обновили данные и ваша обновлённая строка попала на другую страницу таблицы (тут надо оговориться про FILLFACTOR) с появлением мёртвой записи (dead tuple) в текущей позиции. Затем autovacuum-процесс удалил мёртвую запись, и освободившийся слот заполнился вновь поступившей строкой.
➡️ Читать дальше
@sqlhub
👍8❤1🔥1
🔐 КАК ИЗМЕНИТЬ ПАРОЛЬ ПОЛЬЗОВАТЕЛЯ MYSQL
Одной из важных операций при работе с пользователями в СУБД MySQL является смена пароля пользователя. Как правило изменить пароль пользователя может только суперпользователь с именем root. Однако если обычный пользователь наделен полномочиями на смену пароля то он также может это сделать.
В данной статье будет рассмотрено как изменить пароль пользователя MySQL в операционной системе Ubuntu 20.04.
Содержание статьи:
Как сменить пароль пользователя MySQL
Шаг 1. Как узнать версию MySQL
Шаг 2. Вход в консоль MySQL
Шаг 3. Просмотр хостов пользователя
Шаг 4. Смена пароля пользователя при помощи SET PASSWORD
Шаг 5. Смена пароля пользователя при помощи ALTER USER
Шаг 6. Сброс кэша привилегий
Шаг 7. Проверка нового пароля
Выводы
➡️ Читать дальше
@sqlhub
Одной из важных операций при работе с пользователями в СУБД MySQL является смена пароля пользователя. Как правило изменить пароль пользователя может только суперпользователь с именем root. Однако если обычный пользователь наделен полномочиями на смену пароля то он также может это сделать.
В данной статье будет рассмотрено как изменить пароль пользователя MySQL в операционной системе Ubuntu 20.04.
Содержание статьи:
Как сменить пароль пользователя MySQL
Шаг 1. Как узнать версию MySQL
Шаг 2. Вход в консоль MySQL
Шаг 3. Просмотр хостов пользователя
Шаг 4. Смена пароля пользователя при помощи SET PASSWORD
Шаг 5. Смена пароля пользователя при помощи ALTER USER
Шаг 6. Сброс кэша привилегий
Шаг 7. Проверка нового пароля
Выводы
➡️ Читать дальше
@sqlhub
👍8❤1🔥1
Агрегаты в БД — зачем, как, а стоит ли?
С течением жизни приложения в его БД накапливается все больше данных. Десктопное оно, SaaS или даже мобильное – неважно, в современном мире почти каждый что-то хранит “у себя”.
Если это какая-то локальная утилита – не страшно, само ее существование у пользователя достаточно ограничено. Но если это что-то вроде нашего СБИС, который накапливает и помогает анализировать операции за все время существования бизнеса, то, по мере его роста, не только операций становится больше, но и понимания, какие именно сводные отчеты помогают в оперативном управлении.
Вот про то, как сделать такие отчеты быстрыми, какие бывают способы их реализации и встречаются “грабли” на этом пути, сегодня и поговорим.
➡️ Читать дальше
@sqlhub
С течением жизни приложения в его БД накапливается все больше данных. Десктопное оно, SaaS или даже мобильное – неважно, в современном мире почти каждый что-то хранит “у себя”.
Если это какая-то локальная утилита – не страшно, само ее существование у пользователя достаточно ограничено. Но если это что-то вроде нашего СБИС, который накапливает и помогает анализировать операции за все время существования бизнеса, то, по мере его роста, не только операций становится больше, но и понимания, какие именно сводные отчеты помогают в оперативном управлении.
Вот про то, как сделать такие отчеты быстрыми, какие бывают способы их реализации и встречаются “грабли” на этом пути, сегодня и поговорим.
➡️ Читать дальше
@sqlhub
👍7❤1🔥1
🔥 Рефакторинг SQL-запросов
Практически любой разработчик приложений баз данных сталкивается с необходимостью переделки ранее написанных SQL-запросов. При этом обычно преследуются две цели: во-первых – оптимизация времени выполнения запроса, во-вторых – улучшение дизайна запроса. Этот процесс подпадает под определение одной из основных практик экстремального программирования – рефакторинга (улучшения качества кода без изменения его функциональности). Основная масса литературы по рефакторингу посвящена переделке кодов программ, написанных на алгоритмических языках, и касается, как правило, объектно-ориентированных аспектов программирования. Целью данной статьи является попытка описания практики рефакторинга для SELECT-запросов языка SQL.
➡️ Читать дальше
@sqlhub
Практически любой разработчик приложений баз данных сталкивается с необходимостью переделки ранее написанных SQL-запросов. При этом обычно преследуются две цели: во-первых – оптимизация времени выполнения запроса, во-вторых – улучшение дизайна запроса. Этот процесс подпадает под определение одной из основных практик экстремального программирования – рефакторинга (улучшения качества кода без изменения его функциональности). Основная масса литературы по рефакторингу посвящена переделке кодов программ, написанных на алгоритмических языках, и касается, как правило, объектно-ориентированных аспектов программирования. Целью данной статьи является попытка описания практики рефакторинга для SELECT-запросов языка SQL.
➡️ Читать дальше
@sqlhub
👍7❤3🔥1