Форум программистов, компьютерный форум, киберфорум
PostgreSQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/25: Рейтинг темы: голосов - 25, средняя оценка - 4.52
0 / 0 / 0
Регистрация: 08.04.2020
Сообщений: 28

PostgreSQL, запросы

08.04.2020, 13:51. Показов 5615. Ответов 16

Студворк — интернет-сервис помощи студентам
Поставил себе debian на virtualbox, чтобы изучать sql. Работаю с демонстрационной базой данных, взятой с сайта postgrepro.ru, по книжке Могунова. В самой базе содержится ряд таблиц, одна из который называется "aircrafts" (прилагаю скрин). В ходе выполнения запроса у меня не отображаются названия моделей самолётов из этой таблицы. Как видите, пишу select*from aircrafts, а колонка model выдаётся пустой. Не понимаю, почему так происходит. На debian у меня стоит как русская, так и английская раскладка клавиатуры и всё работает. На Хабре задал этот же вопрос, но там как-то туманно намекнули без продолжения диалога, что всё дело в локали, которую я,возможно, неправильно указал, когда закачивал себе debian. На всякий случай я поменял локаль на ru_Ru.UTF8, но ничего не изменилось. Прошу вас помочь. Если я где-то жёстко туплю, то вы уж простите меня, т.к. я в этом деле новичок.
Миниатюры
PostgreSQL, запросы  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.04.2020, 13:51
Ответы с готовыми решениями:

Динамические запросы в PostgreSQL
Здравствуйте! Подскажите пожалуйста, где можно почитать про составление динамических запросов в PostgreSQL? (на русском языке). Использую...

PostgreSQL
Здраствуйте. Работаю на одной из фирм , програмистом. Тока начинают. Програмирую на Линуксе. Так вот дали задание сотворить програмку с...

PostgreSQL 9.4.10 1с
Крутится 15 БД 1с Винты баракуды в 10 Пользователей немного порядка 20 Базы занимают порядка 300 гб. Возможно ли разнести БД на...

16
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
08.04.2020, 14:03
Цитата Сообщение от Froman Посмотреть сообщение
select*from aircrafts
Попробуй таки оградить * пробелами. Лишние пробелы в SQL никогда не мешали. Подобный запрос от кодировки БД зависеть не должен, максимум выдать русские буквы в виде знаков вопроса
0
0 / 0 / 0
Регистрация: 08.04.2020
Сообщений: 28
08.04.2020, 14:07  [ТС]
Отгородил, но ничего не изменилось. Колонка "model" всё так же пуста.
0
1264 / 978 / 384
Регистрация: 02.09.2012
Сообщений: 3,021
09.04.2020, 15:33
Когда где-то что-то берет, необходимо внимательнее читать описание
SQL
1
2
3
4
Отличия от предыдущей версии
 
    Таблица airports заменена на одноименное представление над таблицей airports_data, в которой поля airport_name и city содержат значения как на русском, так и на английском языках. Представление показывает данные на языке, установленном в конфигурационном параметре bookings.lang (по умолчанию — русский).
    Аналогично таблица aircrafts заменена на одноименное представление над таблицей aircrafts_data. Переведено поле model.
Судя по содержимому, модель достается из Jsob поля model другой таблицы. имя поля определяется выставленным языком.
см. в дампе параметр bookings.lang = 'ru';
0
0 / 0 / 0
Регистрация: 08.04.2020
Сообщений: 28
09.04.2020, 16:08  [ТС]
Я правильно вас понял...Я просто должен вместо команды select * from aircrafts написать select * from aircrafts_data?
0
0 / 0 / 0
Регистрация: 08.04.2020
Сообщений: 28
09.04.2020, 22:27  [ТС]
А если я скачаю базу предыдущей версии, то у меня этих проблем не будет?
0
1264 / 978 / 384
Регистрация: 02.09.2012
Сообщений: 3,021
09.04.2020, 23:35
Не совсем. Смотрите какая последовательность. Берем базу (small), большую не буду качать. Распаковываем, смотрим текстовым редактором содержимое файла, который есть текстовый дамп базы.

Сначала начнем с вашего запроса.
SQL
1
SELECT * FROM aircrafts
У вас полная выборка из таблицы aircrafts. Ищем, что это на самом деле такое в дампе. Находим это.
SQL
1
2
3
4
5
CREATE VIEW aircrafts AS
 SELECT ml.aircraft_code,
    (ml.model ->> lang()) AS model,
    ml.range
   FROM aircrafts_data ml;
Так. На самом деле aircrafts - это представление, и выборка из aircrafts - это выборка из aircrafts_data с небольшим преобразованием model. Смотрим, что такое aircrafts_data.
SQL
1
2
3
4
5
6
CREATE TABLE aircrafts_data (
    aircraft_code CHARACTER(3) NOT NULL,
    model jsonb NOT NULL,
    range INTEGER NOT NULL,
    CONSTRAINT aircrafts_range_check CHECK ((range > 0))
);
Так. aircrafts_data - это действительно конечная таблица. Обращаем пристальное внимание, что model имеет тип данных jsonb. Запоминаем этот факт. Возвращаемся в представление. Смотрим что за зверь model.
SQL
1
    (ml.model ->> lang()) AS model,
model - это результат применения оператора ->> к двум операндам. Левый - это json- или jsonb-объект. Правый - это текстовая строка, которая получается как результат вызова некоторой функции lang(). В сумме это выражение обладает следующим смыслом: берем json-объект из поля model в aircrafts_data и из этого объекта возвращаем значение атрибута, имя которого возвращает функция lang().
Смотрим, что такое lang()
SQL
1
2
3
4
5
6
7
8
9
10
CREATE FUNCTION lang() RETURNS text
    LANGUAGE plpgsql STABLE
    AS $$
BEGIN
  RETURN current_setting('bookings.lang');
EXCEPTION
  WHEN undefined_object THEN
    RETURN NULL;
END;
$$;
Данная функция возвращает значение параметра bookings.lang. Ищем, что же это за параметр
SQL
1
ALTER DATABASE demo SET bookings.lang = ru;
Итак. Это параметр базы данных, который по этой команде записывается в системную таблицу pg_db_role_setting. Оттуда он применяется при создании каждой сессии пользователя с этой базой данных. Соответственно, ваша проблема с пустой model как-то связана с параметром bookings.lang. Функция lnag() возвращает что-то ошибочное из этого параметра. В результате в json-объекте модели не находится нужный атрибут. Что ту сказать. Надо Вам исследовать всю цепочку. Либо вы неправильно залили dump (возможно упустили какие-то части), либо у вас не применился этот параметр.

Попробуйте в вашей сессии сначала этот запрос
SQL
1
SELECT current_setting('bookings.lang');
прежде чем обращаться к основному запросу.

Добавлено через 3 минуты
Цитата Сообщение от Froman Посмотреть сообщение
А если я скачаю базу предыдущей версии, то у меня этих проблем не будет?
Здесь бы непомешало понять. Что советуют сделать в книжке? Какую версию демобазы качать? Возможно книжка написана как раз под новую версию, но у вас ошибка в заливке дампа и вы не получаете предполагаемый результат. Возможно книжка написана под старую версию. Тогда да, лучше взять предыдущую версию.
0
0 / 0 / 0
Регистрация: 08.04.2020
Сообщений: 28
10.04.2020, 16:19  [ТС]
Выполнив ваш запрос, он мне написал
SQL
1
"ОШИБКА: нераспознанный параметр конфигурации: "bookings.lang"
. Как вы думаете, почему так произошло?

Добавлено через 10 минут
И можно ещё один вопрос...Как вы распаковывали в терминале базу данных? Может я просто её именно неправильно распаковываю и, возможно, теряются какие-то данные.

Добавлено через 3 часа 27 минут
Я в итоге удалили базу данных и скачал версию 2016 г., но теперь я столкнулся с тем, что у меня ничего не открывается......
SQL
1
2
3
4
5
6
7
8
9
postgres=# \c demo
Вы подключены к базе данных "demo" как пользователь "postgres".
demo=# SET search_path TO bookings;
SET
demo=# \d
Отношения не найдены.
demo=# SELECT * FROM aircrafts;
ОШИБКА:  отношение "aircrafts" не существует
СТРОКА 1: SELECT * FROM aircrafts;
0
1264 / 978 / 384
Регистрация: 02.09.2012
Сообщений: 3,021
11.04.2020, 13:22
Цитата Сообщение от Froman Посмотреть сообщение
Как вы думаете, почему так произошло?
не выполнено или както неправиль выпонено это выражение из дампа
SQL
1
ALTER DATABASE demo SET bookings.lang = ru;
опишите все ваши шаги от начала до конца. где что у вас установоено, как залили дамп, как подключились к серверу.
чем подробнее, тем лучше
0
0 / 0 / 0
Регистрация: 08.04.2020
Сообщений: 28
11.04.2020, 19:53  [ТС]
Ну, если говорить подробно, то скачал себе б.д. версии 2016 г. с сайта postgrepro.ru, о котором мы с вами уже говорили. Скачал себе в загрузки, где и распаковал себе её и сохранил. Затем я просто зашёл в терминал и через пользователя root выполнил следующие команды
Bash
1
2
3
4
5
6
7
8
9
10
11
root@optimus:/home/andrewkulagin# service postgresql
Usage: /etc/init.d/postgresql {start|stop|restart|reload|force-reload|status} [version ..]
root@optimus:/home/andrewkulagin# su postgres
postgres@optimus:/home/andrewkulagin$ psql
psql (9.6.17)
Введите "help", чтобы получить справку.
 
postgres=# \c demo
Вы подключены к базе данных "demo" как пользователь "postgres".
demo=# \d
Отношения не найдены.
Ну, как вы видите, к серверу вроде как подключился, потом в postgres зашёл. Однако, я не совсем понял, как именно нужно залить дамп. Как я понимаю, дамп это и есть текстовый файл б.д., верно? Мне раньше казалось, что достаточно скачать себе б.д в загрузки, распаковать её и тот текстовый файл базы сохранить (ну, в прошлой раз я так и сделал и вроде всё получилось)., а затем уже просто подключиться к базе (\c) и всё. Видимо, я ошибался. Так что хотелось бы узнать, как правильно нужно заливать дамп и понять, почему же у меня нет отношений.
0
1264 / 978 / 384
Регистрация: 02.09.2012
Сообщений: 3,021
11.04.2020, 22:48
после того как
Bash
1
su postgres
попробуйте так
Bash
1
psql < demo-small.sql
0
0 / 0 / 0
Регистрация: 08.04.2020
Сообщений: 28
12.04.2020, 19:00  [ТС]
Увы, но не сработало
Bash
1
2
3
4
5
6
7
8
postgres@optimus:/home/andrewkulagin$ psql < demo-small.sql
bash: demo-small.sql: Нет такого файла или каталога
postgres@optimus:/home/andrewkulagin$ psql < demo_small.sql
bash: demo_small.sql: Нет такого файла или каталога
postgres@optimus:/home/andrewkulagin$ psql < "demo"
bash: demo: Нет такого файла или каталога
postgres@optimus:/home/andrewkulagin$ psql < "demo_small.sql"
bash: demo_small.sql: Нет такого файла или каталога
0
1264 / 978 / 384
Регистрация: 02.09.2012
Сообщений: 3,021
13.04.2020, 07:36
Так! Ну а вы что-нибудь сделали, чтобы файл получить??
Например, скачать его с сайта, распаковать.
Перепроверить имя, что такой файл действительно загружен и в наличии в вашей директории, из которой запускаете команду.
Ну как-то голову включаем.
0
0 / 0 / 0
Регистрация: 08.04.2020
Сообщений: 28
13.04.2020, 08:52  [ТС]
По-моему, я вам уже в третий раз говорю, что я его скачал, распаковал, сохранил в документах...Могу вам скриншот кинуть, если хотите.
0
1264 / 978 / 384
Регистрация: 02.09.2012
Сообщений: 3,021
13.04.2020, 12:00
Ну значит нужно путь указать на этот файл в psql.
Я-то откуда знаю, куда вы его скачали и где он у вас лежит.
Я написал краткую команду, как это в принципе делается при восстановлении дампа базы с помощью psql,
в надежде, что вы уже дальше сообразите, что надо конкретно запустить.
0
0 / 0 / 0
Регистрация: 08.04.2020
Сообщений: 28
13.04.2020, 12:16  [ТС]
Вы написали команду, я её ввёл

Добавлено через 11 минут
Я подробно вам расписал мою проблему, показал вам мои команды и скрины. Если я где-то в этих командах делал глупости или забывал простые истины (сейчас вы говорите, что нужно было указать путь к файлу), то вы ведь могли указать на мои ошибки.
0
0 / 0 / 0
Регистрация: 20.01.2020
Сообщений: 1
20.10.2020, 17:18
Нужно сделать: alter database demo set search_path = bookings, public;
Совет от "производителей"))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.10.2020, 17:18
Помогаю со студенческими работами здесь

мониторинг postgresql
привет. Есть проект. БД postgres. на linux, windows 7 и ниже работает норм ставлю Проект на windows 8, как то долго работают запросы к...

GUID postgresql 9.3
Здравствуйте. Пытаюсь снести постгресс при помощи msiexec, он требует GUID (Уникальный номер продукта). Где его можно найти?

Подключение PostgreSQL к QT
Подскажите как с нуля посгрю к кьют подключить, или ссылочек на инфу, на просторах сети не чего путного не нашел. Работая на винде

Из Oracle в postgresql
Здравствуйте, подскажите пожалуйста, как мигрировать, конвертировать базы данных из Oracle в postgresql?

PostgreSQL and Denwer
Добрый вечер всем.Сегодня возникла такая проблема,решил поставить я PostgreSQL на денвер ,все качал с офф сайта .Так вот когда я перехожу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru