Позволит ли postgresql объединение имен идентификаторов (в двойных кавычках)? - PullRequest
1 голос
/ 23 марта 2020

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

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

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

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

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

1 Ответ

1 голос
/ 23 марта 2020

Вы можете execute оператор, который содержит оригинальную команду, форматирование, вызовы функций и т. Д. c. Возможно, вы захотите поместить ограничение в оператор 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: хотя текст кажется слишком длинным и будет усечен, независимо от конкатенация строк

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...