В процессе разработки (PostgreSQL на Linux) возник простой вопрос:
возможно ли в PostgreSQL давать имена таблиц и полей — в таком виде:
Конечно же, когда в БД эти сущности именуются именно так, как в этом SQL — запросе:
SELECT * FROM bookings.AircraftsData
ORDER BY AircraftCode ASC
В демонстрационном примере из книжки Е.П.Моргунов "PostgreSQL Основы языка SQL" СПб BHV 2018.
Пример взят отсюда: https://edu.postgrespro.ru
Подобный запрос выглядит так:
SELECT * FROM bookings.aircrafts_data
ORDER BY aircraft_code ASC
Есть ли вариант — сделать как в первм запросе (BigCammel) и одновременно избежать кавычки вокруг имён таблиц и полей?
Здравствуйте, AlexGin, Вы писали:
AG>В процессе разработки (PostgreSQL на Linux) возник простой вопрос: AG>возможно ли в PostgreSQL давать имена таблиц и полей — в таком виде:
Здравствуйте, night beast, Вы писали:
NB>что мешает? ты пробовал?
Вот такие шаги по эксперименту:
1) В среде pgAdmin — я сделал базу: Test_db;
2) Там же, выбрав Test_db — меню Tools->Query Tool — ввожу запрос (точнее даже два запрса):
CREATE TABLE AircraftsData (id SERIAL UNIQUE, ModelId SMALLINT, AircraftCode CHARACTER VARYING(6), Name CHARACTER VARYING(40));
ALTER TABLE IF EXISTS AircraftsData ADD CONSTRAINT AircraftsData_pkey PRIMARY KEY (id);
ответ: Query returned successfully in 30 msec.
Все — вроде как правильно?
Но — созданы сущности (таблица и поля в ней) — на нижнем регистре:
P.S. Я в курсе — что кавычки в запросе — спасут ситуацию, но именно их я хочу избежать!
Здравствуйте, L.K., Вы писали:
AG>>Есть ли вариант — сделать как в первм запросе (BigCammel) и одновременно избежать кавычки вокруг имён таблиц и полей?
LK>Конечно, нет: без кавычек имена таблиц и полей будут приведены к нижнему регистру. Да и потом, чем мешают кавычки?
Тем, что в текстах (кодах) на C/C++ их надо как-то экранировать типа: \"
После чего, если я переношу этот отрезок текста (SQL-запрос) в среду pgAdmin — мне потребуется вручную править названия всех полей — что, согласись, гемморойно (трудозатратно) и грозит внесением всевозможных ошибок.
Здравствуйте, AlexGin, Вы писали:
AG>Есть ли вариант — сделать как в первм запросе (BigCammel) и одновременно избежать кавычки вокруг имён таблиц и полей?
Нет, такого варианта нет.
Если используешь ORM там как правило есть настройка трансляции имен.
Re[3]: PostgreSQL - имена таблиц и полей в BigCammel
AG>Тем, что в текстах (кодах) на C/C++ их надо как-то экранировать типа: \" AG>После чего, если я переношу этот отрезок текста (SQL-запрос) в среду pgAdmin — мне потребуется вручную править названия всех полей — что, согласись, гемморойно (трудозатратно) и грозит внесением всевозможных ошибок.
Что значит "вручную"? Сделать поиск с заменой \" на " — это 5 секунд.
Или можно наоборот: сделать простейшую функцию, расставляющую кавычки в строке с запросом (перед отправкой этого запроса постгресу).
Re[4]: PostgreSQL - имена таблиц и полей в BigCammel
Здравствуйте, L.K., Вы писали:
LK>Что значит "вручную"? Сделать поиск с заменой \" на " — это 5 секунд. LK>Или можно наоборот: сделать простейшую функцию, расставляющую кавычки в строке с запросом (перед отправкой этого запроса постгресу).
Подумаю на этим — может и имеет смысл
Re[5]: PostgreSQL - имена таблиц и полей в BigCammel
Здравствуйте, AlexGin, Вы писали:
AG>Здравствуйте, L.K., Вы писали:
LK>>Что значит "вручную"? Сделать поиск с заменой \" на " — это 5 секунд. LK>>Или можно наоборот: сделать простейшую функцию, расставляющую кавычки в строке с запросом (перед отправкой этого запроса постгресу).
AG>Подумаю на этим — может и имеет смысл
IMHO в чужой монастырь со своим уставном не ходят.
Я сначала не понял почему не используешь ORM, потому увидел C++
Здравствуйте, AlexGin, Вы писали:
AG>Есть ли вариант — сделать как в первм запросе (BigCammel) и одновременно избежать кавычки вокруг имён таблиц и полей?
Пока непонятно, в чём проблема. Постгрес же case-insensitive:
AG>>SELECT * FROM bookings.AircraftsData
AG>>ORDER BY AircraftCode ASC
AG>>
P>Можно, bookings."AircraftsData" P>То же и с колонками.
Так в кодах проекта на C/C++ потребуется экранировать — типа "\"" — то есть дополнительные действия
Re[2]: PostgreSQL - имена таблиц и полей в BigCammel
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, AlexGin, Вы писали:
AG>>Есть ли вариант — сделать как в первм запросе (BigCammel) и одновременно избежать кавычки вокруг имён таблиц и полей?
S>Пока непонятно, в чём проблема. Постгрес же case-insensitive:
S>https://www.db-fiddle.com/f/tasv4nqDSKKsu4rwYdETHM/0
Но case-insensitive — в плане ключевых слов языка SQL, а не в плане наименований сущностей в составе БД.
Re[3]: PostgreSQL - имена таблиц и полей в BigCammel
Здравствуйте, AlexGin, Вы писали:
AG>Но case-insensitive — в плане ключевых слов языка SQL, а не в плане наименований сущностей в составе БД.
Пример запускали?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: PostgreSQL - имена таблиц и полей в BigCammel
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, AlexGin, Вы писали:
AG>>Но case-insensitive — в плане ключевых слов языка SQL, а не в плане наименований сущностей в составе БД. S>Пример запускали?
Да, запустил, посмотрел!
1) Выполнение SQL запроса:
insert into AircraftsData values ('B767', 'Boeing B767'),
('A320', 'Airbus A320');
Добавил две записи — вот результат:
3) Выполнение запроса:
SELECT * FROM AircraftsData
ORDER BY AircraftCode ASC
Даёт результат:
Вот — получается, что все вроде как корректно отработало?
В запросе на выборку — где SELECT — нет чувствительности к регистру символов таблиц и полей.
P.S. Но — первоначальный запрос — где create table — содержал имена таблицы и полей — с БольшимиБуквами, а в составе БД получились все эти вещицы — на нижнем регистре (малыми буквами). В общем — что и требовалось доказать.
P.P.S. В любом случае, уважаемый Sinclair, пример интересен. Хотя бы тем, что с SELECT-ом разобрались
Огромное спасибо!
Здравствуйте, AlexGin, Вы писали:
NB>>что мешает? ты пробовал?
AG>Вот такие шаги по эксперименту: AG>Все — вроде как правильно? AG>Но — созданы сущности (таблица и поля в ней) — на нижнем регистре:
так а какая разница, в каком регистре они созданы?
работать с ними ты можешь как планировал?
просто учитывай что внутри они лежат маленькие, и все.
Здравствуйте, AlexGin, Вы писали:
LK>>Конечно, нет: без кавычек имена таблиц и полей будут приведены к нижнему регистру. Да и потом, чем мешают кавычки?
AG>Тем, что в текстах (кодах) на C/C++ их надо как-то экранировать типа: \" AG>После чего, если я переношу этот отрезок текста (SQL-запрос) в среду pgAdmin — мне потребуется вручную править названия всех полей — что, согласись, гемморойно (трудозатратно) и грозит внесением всевозможных ошибок.