Когда мне следует создать собственное расширение Postgres

Я читал кое-что о расширениях postgres и заинтересовался написанием собственного расширения на C, чтобы удовлетворить спрос моей компании.

Сценарий: У нас есть большой и медленный запрос, который перебирает все схемы, проверяя определенный столбец даты и времени из определенной таблицы. Cron запускает этот запрос каждые 5 часов.

Имеет ли смысл писать расширение, которое делает то же самое на C? Будет ли это пользой или я неправильно понимаю концепцию расширений postgres?

Какую проблему должно решить расширение? Эта работа не будет быстрее только потому, что это расширение. Так что же вы делаете, чтобы сделать по-другому? И зачем для этого нужно расширение? SELECT pg_sleep(10); занимает всегда одинаковое количество времени, с наращиванием или без.

Frank Heikens 18.07.2024 16:47

Голосуйте за возобновление обсуждения: на вопрос можно ответить «с фактами и цитатами». Вопрос может звучать так, но, как показывает ответ, он не очень основан на мнении, тем более что ОП описывает конкретный вариант использования.

Zegarek 18.07.2024 19:37
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы должны различать эти две вещи:

  • Расширение PostgreSQL — это «установочный пакет» в базе данных. Если вы создадите расширение, в базе данных автоматически будет создано несколько объектов базы данных (членов расширения). Этими объектами может быть что угодно, и они не имеют никакого отношения к коду C.

  • Пользовательская функция на языке C — это функция базы данных, которая вызывает функцию в общей библиотеке, которая динамически подключается к серверу при первом вызове функции в сеансе базы данных.

Возможно, имеет смысл упаковать вашу функцию C в расширение, но эти две вещи в принципе независимы.

Чтобы выяснить, будет ли ваша задача выполняться быстрее в функции C, вам нужно выяснить, на что тратится время. Если время тратится на последовательное сканирование таблиц, функция C вам не поможет. Вам понадобится индекс, чтобы ускорить это. С другой стороны, если большую часть вашего времени вы тратите на код функции PL/pgSQL, который выполняет вычисления или циклически обрабатывает результаты запроса, функция C может значительно ускорить обработку.

Другие вопросы по теме

Похожие вопросы

Я пытаюсь создать систему входа в систему на языке C, которая скрывает пароль с помощью '*' при вводе и возвращается назад, когда пользователь вводит неверную информацию
Как заставить CMake находить системные библиотеки по умолчанию для связывания без ручных манипуляций со сценариями?
Печать целых чисел дважды в одном операторе printf в программе на языке C
Является ли оператор & важным для использования в качестве оператора адреса?
В языке C первый символ строковой переменной равен 0, но при печати 0 исчезает?
Язык программирования C Неопределенное поведение
Как я могу найти CRC по этим данным
Как/когда именно Cortex-M4 (STM32 F4) переключает свой R13 с MSP на PSP? Нужно ли вручную переключаться при использовании PSP во встроенном asm?
Как исторически люди могли использовать целые числа для хранения указателей C?
Неверный расчет математического выражения с использованием sin и cos в C?