PostgreSQL - имена таблиц и полей в BigCammel
От: AlexGin Беларусь  
Дата: 18.10.25 17:03
Оценка:
Доброе время суток, уважаемые коллеги!

В процессе разработки (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) и одновременно избежать кавычки вокруг имён таблиц и полей?

Запанее благодарен за любые подсказки!
Re: PostgreSQL - имена таблиц и полей в BigCammel
От: night beast СССР  
Дата: 18.10.25 17:51
Оценка:
Здравствуйте, AlexGin, Вы писали:

AG>В процессе разработки (PostgreSQL на Linux) возник простой вопрос:

AG>возможно ли в PostgreSQL давать имена таблиц и полей — в таком виде:

что мешает? ты пробовал?
Re: PostgreSQL - имена таблиц и полей в BigCammel
От: L.K. Марс  
Дата: 18.10.25 18:14
Оценка:
AG>Есть ли вариант — сделать как в первм запросе (BigCammel) и одновременно избежать кавычки вокруг имён таблиц и полей?

Конечно, нет: без кавычек имена таблиц и полей будут приведены к нижнему регистру. Да и потом, чем мешают кавычки?
Re[2]: PostgreSQL - имена таблиц и полей в BigCammel
От: AlexGin Беларусь  
Дата: 18.10.25 18:16
Оценка:
Здравствуйте, 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. Я в курсе — что кавычки в запросе — спасут ситуацию, но именно их я хочу избежать!
Отредактировано 18.10.2025 18:31 AlexGin . Предыдущая версия . Еще …
Отредактировано 18.10.2025 18:25 AlexGin . Предыдущая версия .
Отредактировано 18.10.2025 18:23 AlexGin . Предыдущая версия .
Re[2]: PostgreSQL - имена таблиц и полей в BigCammel
От: AlexGin Беларусь  
Дата: 18.10.25 18:22
Оценка:
Здравствуйте, L.K., Вы писали:

AG>>Есть ли вариант — сделать как в первм запросе (BigCammel) и одновременно избежать кавычки вокруг имён таблиц и полей?


LK>Конечно, нет: без кавычек имена таблиц и полей будут приведены к нижнему регистру. Да и потом, чем мешают кавычки?


Тем, что в текстах (кодах) на C/C++ их надо как-то экранировать типа: \"
После чего, если я переношу этот отрезок текста (SQL-запрос) в среду pgAdmin — мне потребуется вручную править названия всех полей — что, согласись, гемморойно (трудозатратно) и грозит внесением всевозможных ошибок.
Re: PostgreSQL - имена таблиц и полей в BigCammel
От: bnk СССР http://unmanagedvisio.com/
Дата: 18.10.25 18:51
Оценка: 4 (1) +1
Здравствуйте, AlexGin, Вы писали:

AG>Есть ли вариант — сделать как в первм запросе (BigCammel) и одновременно избежать кавычки вокруг имён таблиц и полей?


Нет, такого варианта нет.
Если используешь ORM там как правило есть настройка трансляции имен.
Re[3]: PostgreSQL - имена таблиц и полей в BigCammel
От: L.K. Марс  
Дата: 18.10.25 20:34
Оценка:
AG>Тем, что в текстах (кодах) на C/C++ их надо как-то экранировать типа: \"
AG>После чего, если я переношу этот отрезок текста (SQL-запрос) в среду pgAdmin — мне потребуется вручную править названия всех полей — что, согласись, гемморойно (трудозатратно) и грозит внесением всевозможных ошибок.

Что значит "вручную"? Сделать поиск с заменой \" на " — это 5 секунд.

Или можно наоборот: сделать простейшую функцию, расставляющую кавычки в строке с запросом (перед отправкой этого запроса постгресу).
Re[4]: PostgreSQL - имена таблиц и полей в BigCammel
От: AlexGin Беларусь  
Дата: 18.10.25 21:16
Оценка:
Здравствуйте, L.K., Вы писали:

LK>Что значит "вручную"? Сделать поиск с заменой \" на " — это 5 секунд.

LK>Или можно наоборот: сделать простейшую функцию, расставляющую кавычки в строке с запросом (перед отправкой этого запроса постгресу).

Подумаю на этим — может и имеет смысл
Re[5]: PostgreSQL - имена таблиц и полей в BigCammel
От: bnk СССР http://unmanagedvisio.com/
Дата: 18.10.25 21:44
Оценка:
Здравствуйте, AlexGin, Вы писали:

AG>Здравствуйте, L.K., Вы писали:


LK>>Что значит "вручную"? Сделать поиск с заменой \" на " — это 5 секунд.

LK>>Или можно наоборот: сделать простейшую функцию, расставляющую кавычки в строке с запросом (перед отправкой этого запроса постгресу).

AG>Подумаю на этим — может и имеет смысл


IMHO в чужой монастырь со своим уставном не ходят.
Я сначала не понял почему не используешь ORM, потому увидел C++
Re: PostgreSQL - имена таблиц и полей в BigCammel
От: Sinclair Россия https://github.com/evilguest/
Дата: 19.10.25 11:24
Оценка:
Здравствуйте, AlexGin, Вы писали:

AG>Есть ли вариант — сделать как в первм запросе (BigCammel) и одновременно избежать кавычки вокруг имён таблиц и полей?


Пока непонятно, в чём проблема. Постгрес же case-insensitive:

https://www.db-fiddle.com/f/tasv4nqDSKKsu4rwYdETHM/0
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: PostgreSQL - имена таблиц и полей в BigCammel
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 19.10.25 12:24
Оценка:
Здравствуйте, AlexGin, Вы писали:

AG>Конечно же, когда в БД эти сущности именуются именно так, как в этом SQL — запросе:


AG>
AG>SELECT * FROM bookings.AircraftsData
AG>ORDER BY AircraftCode ASC 
AG>


Можно, bookings."AircraftsData"
То же и с колонками.
Re[2]: PostgreSQL - имена таблиц и полей в BigCammel
От: AlexGin Беларусь  
Дата: 19.10.25 12:51
Оценка:
Здравствуйте, Pauel, Вы писали:

AG>>
AG>>SELECT * FROM bookings.AircraftsData
AG>>ORDER BY AircraftCode ASC 
AG>>


P>Можно, bookings."AircraftsData"

P>То же и с колонками.

Так в кодах проекта на C/C++ потребуется экранировать — типа "\"" — то есть дополнительные действия
Re[2]: PostgreSQL - имена таблиц и полей в BigCammel
От: AlexGin Беларусь  
Дата: 19.10.25 12:54
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, AlexGin, Вы писали:


AG>>Есть ли вариант — сделать как в первм запросе (BigCammel) и одновременно избежать кавычки вокруг имён таблиц и полей?


S>Пока непонятно, в чём проблема. Постгрес же case-insensitive:


S>https://www.db-fiddle.com/f/tasv4nqDSKKsu4rwYdETHM/0


Но case-insensitive — в плане ключевых слов языка SQL, а не в плане наименований сущностей в составе БД.
Re[3]: PostgreSQL - имена таблиц и полей в BigCammel
От: Sinclair Россия https://github.com/evilguest/
Дата: 19.10.25 16:38
Оценка: 4 (1) +1
Здравствуйте, AlexGin, Вы писали:

AG>Но case-insensitive — в плане ключевых слов языка SQL, а не в плане наименований сущностей в составе БД.

Пример запускали?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: PostgreSQL - имена таблиц и полей в BigCammel
От: AlexGin Беларусь  
Дата: 19.10.25 17:38
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, AlexGin, Вы писали:


AG>>Но case-insensitive — в плане ключевых слов языка SQL, а не в плане наименований сущностей в составе БД.

S>Пример запускали?

Да, запустил, посмотрел!
1) Выполнение SQL запроса:
create table AircraftsData (
  AircraftCode char(5) primary key,
  AircraftDescription varchar(250)
);


создало таблицу

2) Запрос:
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-ом разобрались
Огромное спасибо!
Отредактировано 19.10.2025 17:58 AlexGin . Предыдущая версия . Еще …
Отредактировано 19.10.2025 17:58 AlexGin . Предыдущая версия .
Отредактировано 19.10.2025 17:53 AlexGin . Предыдущая версия .
Отредактировано 19.10.2025 17:52 AlexGin . Предыдущая версия .
Отредактировано 19.10.2025 17:47 AlexGin . Предыдущая версия .
Отредактировано 19.10.2025 17:45 AlexGin . Предыдущая версия .
Отредактировано 19.10.2025 17:43 AlexGin . Предыдущая версия .
Re[3]: PostgreSQL - имена таблиц и полей в BigCammel
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 19.10.25 18:40
Оценка:
Здравствуйте, AlexGin, Вы писали:

AG>Так в кодах проекта на C/C++ потребуется экранировать — типа "\"" — то есть дополнительные действия


Вам нужен внятный орм
Re: PostgreSQL - имена таблиц и полей в BigCammel
От: AlexGin Беларусь  
Дата: 20.10.25 07:24
Оценка:
Вот — материал по этой теме:

https://webhamster.ru/mytetrashare/index/mtb0/169770366212fmi3i4xq
Re[3]: PostgreSQL - имена таблиц и полей в BigCammel
От: night beast СССР  
Дата: 20.10.25 13:53
Оценка: +1
Здравствуйте, AlexGin, Вы писали:

NB>>что мешает? ты пробовал?


AG>Вот такие шаги по эксперименту:

AG>Все — вроде как правильно?
AG>Но — созданы сущности (таблица и поля в ней) — на нижнем регистре:

так а какая разница, в каком регистре они созданы?
работать с ними ты можешь как планировал?
просто учитывай что внутри они лежат маленькие, и все.
Отредактировано 20.10.2025 13:56 night beast . Предыдущая версия .
Re[3]: PostgreSQL - имена таблиц и полей в BigCammel
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 28.11.25 10:25
Оценка:
Здравствуйте, AlexGin, Вы писали:

LK>>Конечно, нет: без кавычек имена таблиц и полей будут приведены к нижнему регистру. Да и потом, чем мешают кавычки?


AG>Тем, что в текстах (кодах) на C/C++ их надо как-то экранировать типа: \"

AG>После чего, если я переношу этот отрезок текста (SQL-запрос) в среду pgAdmin — мне потребуется вручную править названия всех полей — что, согласись, гемморойно (трудозатратно) и грозит внесением всевозможных ошибок.

#include <iostream>
int main()
{
  std::cout << R"moo(Hello "world" "of" "SQL"!)moo" << std::endl;
}
The God is real, unless declared integer.
Отредактировано 28.11.2025 10:25 netch80 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.