powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Обслуживание нескольких баз с помощью pgAgent
15 сообщений из 15, страница 1 из 1
Обслуживание нескольких баз с помощью pgAgent
    #39252594
liivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте! Имеется CentOS 7 + PostgreSQL 9.4 + pgAgent 9.4 + pgAdmin 1.22. Есть две базы, с помощью pgAdmin настроены два задания для pgAgent c двумя шагами в каждом. Первый шаг выполняется команда REINDEX DATABASE db1, во втором шаге VACUUM ANALYZE. В другом задании на первом шаге вместо db1 записано db2, второй шаг точно такой - же как и в первом задании.
Первое задание выполняется по расписанию без проблем. второе завершается ошибкой на первом шаге, "REINDEX DATABASE db2 можно использовать только с текущей базой". Вопрос в том как поменять текущую базу? В шагах использовал и удаленное подключение и локальное, безрезультатно. Почему текущей базой всегда является одна и та же база непонятно. Подскажите пожалуйста, как решить.
...
Рейтинг: 0 / 0
Обслуживание нескольких баз с помощью pgAgent
    #39252741
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
liivan,

у шага есть поле "БД" (jstdbname)

в интерфейсе -- при флаге "Локально" -- комбо.

а вообще говоря пгагент -- довольно скорбное поделие, с застарелой ошибкой с использованием локалей при сохранении текста запроса.
...
Рейтинг: 0 / 0
Обслуживание нескольких баз с помощью pgAgent
    #39252798
liivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwq,

qwwqу шага есть поле "БД" (jstdbname)

Поле есть. И оно заполнено нужной базой данных, только это не помогает.
Ставлю в настройках локально указываю нужную базу, ошибка все одно выдаётся

qwwqв интерфейсе -- при флаге "Локально" -- комбо.

Извините за тупость, но смысл этой строки для меня остался загадкой. Разъясните пожалуйста
...
Рейтинг: 0 / 0
Обслуживание нескольких баз с помощью pgAgent
    #39252915
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
liivanИзвините за тупостьне извиню.

приведите строку настроек шага из pgagent.pga_jobstep , и соответств. ошибку.

ошибку лучше всего из лога самого постгреса (в логе настроить вывод имени БД в префикс), но можно и из pgagent.pga_jobsteplog -- если затрудняетесь найти в логах пг.

будем смотреть на.
...
Рейтинг: 0 / 0
Обслуживание нескольких баз с помощью pgAgent
    #39253007
liivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwq,

Фрагмент postgresql.log
< Motivation postgres 2016-06-08 17:02:56.540 SAMT >ОШИБКА: переиндексировать можно только текущую базу данных
< Motivation postgres 2016-06-08 17:02:56.540 SAMT >ОПЕРАТОР: REINDEX DATABASE Motivation

Настройка шага задания
jstidjstjobidjstnamejstdescjstenabledjstkindjstcodejstconstrjstdbnamejstonerror"""1"1"Пылесос мотивации""''"TRUE"s""VACUUM ANALYZE""''""Motivation""f""""2"1"Переиндексация мотивации""''"TRUE"s""REINDEX DATABASE Motivation""''""Motivation""i"""
...
Рейтинг: 0 / 0
Обслуживание нескольких баз с помощью pgAgent
    #39253055
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
liivanqwwq,

Фрагмент postgresql.log
< Motivation postgres 2016-06-08 17:02:56.540 SAMT >ОШИБКА: переиндексировать можно только текущую базу данных
< Motivation postgres 2016-06-08 17:02:56.540 SAMT >ОПЕРАТОР:
Код: sql
1.
 REINDEX DATABASE Motivation



Настройка шага задания
jstidjstjobidjstnamejstdescjstenabledjstkindjstcodejstconstrjstdbnamejstonerror"""1"1"Пылесос мотивации""''"TRUE"s""VACUUM ANALYZE""''""Motivation""f""""2"1"Переиндексация мотивации""''"TRUE"s""REINDEX DATABASE Motivation""''""Motivation""i"""


"Motivation"<>Motivation
but
"motivation"=Motivation
...
Рейтинг: 0 / 0
Обслуживание нескольких баз с помощью pgAgent
    #39253282
liivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwq,

Спасибо большое! Просто поменять букву в запросе не помогло. В итоге полностью удалил Motivation, создал базу motiv и процесс пошёл!
...
Рейтинг: 0 / 0
Обслуживание нескольких баз с помощью pgAgent
    #39253328
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
liivan,

Вы не поняли.
Postgres по умолчанию приводит все идентификаторы к нижнему регистру, т.е. Motivation=motivation=MOTIVATION.
Если заключить идентификатор в двойные кавычки, то используется то, что в кавычках, включая пробелы и прочие национальные символы.

В логе видно, что база называется Motivation (с большой буквы).
Вам следовало индексировтаь так: REINDEX DATABASE "Motivation"

https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS
...
Рейтинг: 0 / 0
Обслуживание нескольких баз с помощью pgAgent
    #39253347
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vyegorov, +1
...
Рейтинг: 0 / 0
Обслуживание нескольких баз с помощью pgAgent
    #39253489
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тем не менее, здесь есть нюансы.
Да, postgres хранит в системном каталоге имена объектов в нижнем регистре, но поведение с именами баз данных и, например, таблицами отличается.

Для баз данных мы должны использовать имена в нижнем регистре:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
postgres=# create database Motivation;
CREATE DATABASE
postgres=# \c Motivation
FATAL:  database "Motivation" does not exist
Previous connection kept
postgres=# \c MOTIVATION
FATAL:  database "MOTIVATION" does not exist
Previous connection kept
postgres=# \c motivation
You are now connected to database "motivation" as user "postgres".


Однако работа с именами таблиц не зависит от регистра:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
postgres=# create table Motivation (c int);
CREATE TABLE
postgres=# select * from Motivation;
 c 
---
(0 rows)

postgres=# select * from MOTIVATION;
 c 
---
(0 rows)

postgres=# select * from motivation;
 c 
---
(0 rows)


Такое поведение для имен БД сбивает с толку, ведь принято считать, что без использования кавычек имена объектов SQL регистронезависимы.
...
Рейтинг: 0 / 0
Обслуживание нескольких баз с помощью pgAgent
    #39253513
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Лузанов,

Опытным путем выяснилось, что "косяк" именно в команде psql \connect.
Команды SQL ALTER|DROP|REINDEX DATABASE прекрасно работают с именем БД в любом регистре (если не использовались кавычки).
...
Рейтинг: 0 / 0
Обслуживание нескольких баз с помощью pgAgent
    #39253531
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Лузанов,

В данном случае используется команда `\c` psql клиента, это не уровень языка SQL.
Думаю, что это эффект работы libpq. Да, неочевидно.

Потому и предпочитаю всегда использовать нижний регистр, что в ПЖ, что в других базах.
...
Рейтинг: 0 / 0
Обслуживание нескольких баз с помощью pgAgent
    #39253564
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Лузанов<>
Да, postgres хранит в системном каталоге имена объектов в нижнем регистре, но поведение с именами баз данных и, например, таблицами отличается.
это неправда.

или, как минимум, неудачная формулировка.

постгрес хранит имена так, "как они введены". но для способа ввода символов не латиницы и /или латиницы в верхнем регистре в самом пж--SQL предусмотрены синтаксические приседания.
("ку" надо сказать, короче)
иначе постгрес будет смотреть на ввод как на
, ну вы поняли.
т.е. будет интерпретировать [ввод] как введённое в нижнем регистре. если латиница. а если не латиница, и в имени ещё, не дай, встречаются пробел или точка какая--то -- то и вообще откажется воспринимать в качестве имени.

т.е. это особенность постгресовского синтакс анализа SQL, а совсем не способа хранения имен.
...
Рейтинг: 0 / 0
Обслуживание нескольких баз с помощью pgAgent
    #39253632
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq,

Насколько помню, SQL стандарт говорит о том, что имена объектов регистронезависимы в случае, если эти имена:
- содержат только латиницу, цифры, знак подчеркивания (, возможно $).
- начинаются не с цифры
Это правильный подход к именованию объектов.

Во всех остальных случаях: нелатиница, спец символы и пробелы - имена должны быть в двойных кавычках.
Это неправильный подход с кучей потенциальных проблем.

В случае "правильного" подхода СУБД хранят имена объектов кто в нижем (PostgreSQL), кто в верхнем (Oracle) регистре.
Так объекты легче искать.

И особых особенностей синтакс анализа у PostgreSQL я здесь не вижу.
Кроме явной ошибки в libpq с именами БД при подключении.
...
Рейтинг: 0 / 0
Обслуживание нескольких баз с помощью pgAgent
    #39253669
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Лузанов,

"а он всегда был спорщиком"(с)

кроме работы в "геркулесе" у вас ещё масса забавных черт характера.
вас там, в геркулесе, всех таких подбираюд ?


ещё раз -- хранит пж то, что хранит. можете открыть системные -- и увидите.
а "принимает на хранение" (синтаксически разбирает) -- по понятиям.
в эти понятия входит кукуканье для имен, "содержащих, и т.п. блаблабла".
имена без куку воспринимаются как введённые в нижнем регистре ("воспринимать" -- функция анализа, в д.с. -- синтаксического).

у меня всё.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Обслуживание нескольких баз с помощью pgAgent
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]