Позволит ли postgresql объединить имена идентификаторов (в двойных кавычках)?

Большинство моих имен ограничений являются краткими и короткими, но некоторые из них являются длинными и включают в себя те, что в одной строке, превышают соглашения о стиле кода, с которыми я работаю.

Не думая об этом, я просто сделал разрыв строки и двойную трубу, вот так:

history         uint4                              constraint "[tablename] The beginning of history must be sooner " ||
                                                       "than the current day" check (history <= hdate)

Это, конечно, терпит неудачу, потому что это идентификатор, а не строковый литерал. Я понимаю, почему это терпит неудачу, и это расстраивает меня, потому что я почти уверен, что нет никакого способа сломать и продолжить идентификатор во второй строке.

Я ошибся? Здесь есть хитрость? Кажется, что я должен быть в состоянии избежать с в конце строки, но тогда продолжение не может быть отступ (так как эти пробелы будут частью имени идентификатора).

Всего 1 ответ


Вы можете execute оператор, который содержит исходную команду, форматирование, вызовы функций и т. Д. Вы можете захотеть поместить ограничение в оператор alter table вместо переноса всего оператора создания таблицы в execute

do $$ BEGIN
 EXECUTE 'CREATE TABLE tex (' ||
    'hdate int, ' ||
    'history int constraint "[tablename] The beginning of history must be sooner ' ||
                            'than the current day" check (history <= hdate));'
end $$;

d tex
                 Table "public.tex"
 Column  |  Type   | Collation | Nullable | Default
---------+---------+-----------+----------+---------
 hdate   | integer |           |          |
 history | integer |           |          |
Check constraints:
    "[tablename] The beginning of history must be sooner than the cu" CHECK (history <= hdate)

PS: хотя текст кажется слишком длинным и будет усеченным, независимо от конкатенации строк


Есть идеи?

10000