Создание настраиваемого сценария postgreSQL - PullRequest
0 голосов
/ 26 мая 2018

Я создал сценарий sql для удаления таблицы из базы данных, в которой записи старше 7 дней со схемой ниже.

delete.sql

DELETE from abc where eventtime::date <=(CURRENT_TIMESTAMP-INTERVAL '7 DAYS')::date;
COMMIT;

Я выполняю вышеуказанный SQL-скрипт, используя мой скрипт оболочки, как показано ниже:

xyz.sh

sudo  -u user psql --d db --file=<<path>>/delete.sql

Теперь я должен сделать этот скрипт настраиваемымт. е. пользователь может изменить продолжительность, которая может быть прочитана непосредственно сценарием, а не изменять сценарий всегда.Итак, я пытаюсь создать файл .config и использовать его в качестве ссылки в сценарии SQL.Но я не могу этого сделать.Любая помощь в том, как я могу передать переменную из файла .config в файл сценария postgreSQL.

Ожидаемый сценарий:

.config файл

# duration to delete the records from the database
DURATION =7 DAY

delete.sql

DELETE from abc where eventtime::date <=(CURRENT_TIMESTAMP-INTERVAL '$DURATION')::date;
COMMIT;

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Мне удалось попробовать еще один способ, который не включает команду sed

.config file

# Interval in the past to keep
DURATION='7 DAYS'

xyz.sh

#!/bin/bash

source /<<path>>/file.config

sudo -u user psql -d db -f delete.sql -v DURATION="'${DURATION}'"

"'$ {DURATION}" "возвращает результат как' 7 ДНЕЙ '

delete.sql

DELETE from abc where eventtime::date <=(CURRENT_TIMESTAMP-INTERVAL :DURATION)::date;
COMMIT;

Итак, теперь, когда вы выполните файл xyz.sh , он будет соответствовать ожидаемому сценарию.

0 голосов
/ 26 мая 2018

Редактировать: postgres имеет встроенную поддержку параметров в скриптах (флаг -v).См. Ответ из оп ниже.

В xyz.sh :

#!/usr/bin/env bash

. ./.config

sudo -u user psql -d db -c "DELETE FROM abc WHERE eventtime::DATE <=(CURRENT_TIMESTAMP - INTERVAL '${DURATION} days')::DATE"

Вы должны указать продолжительность в вашем .config file, потому что в нем есть пробел:

# Interval in the past to keep
DURATION="7 DAY"

Если вы хотите сохранить скрипт в отдельном файле, вам придется выполнить замену токена, прежде чем передать его в psql.Можно использовать такую ​​утилиту, как sed:

In xyz.sh :

#!/usr/bin/env bash

. ./.config

cat delete.sql | sed -e "s/DURATION/${DURATION}/g" | sudo -u user psql -d db
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...