psql команда молча терпит неудачу - PullRequest
0 голосов
/ 28 февраля 2020

Когда я запускаю это из сеанса терминала:

   => psql "$pg_cp_prod_conn_str"

и затем выполняю:

   => ALTER TABLE cp_user_emails
      ADD CONSTRAINT email_too_long_ln_check CHECK (char_length(TRIM(email)) < 320);

, то происходит сбой с:

ограничение " email_too_long_ln_check "для отношения" cp_user_emails "уже существует

, но если я выполню это:

psql "$pg_cp_prod_conn_str" -c "$(<<EOF

ALTER TABLE cp_user_emails
  ADD CONSTRAINT email_non_zero_ln_check CHECK (char_length(TRIM(email)) > 4);

ALTER TABLE cp_user_emails
  ADD CONSTRAINT email_too_long_ln_check CHECK (char_length(TRIM(email)) < 321);

EOF
)"

, тогда запрос" успешно "и сообщения об ошибке нет! но когда я смотрю на БД, он такой же, как и раньше, поэтому он явно либо не достигает БД, либо молча терпит неудачу ..

, так почему это не запрос / сбой / выход с 1 с сообщением об ошибке когда я запускаю его как скрипт, а не прямо в терминале?

Ответы [ 2 ]

1 голос
/ 28 февраля 2020

Ваш второй оператор такой же, как

psql "$pg_cp_prod_conn_str" -c "$()"

, потому что эта команда игнорирует свой стандартный ввод

Если вы хотите использовать «здесь документ» с psql, сделайте следующее:

psql "$pg_cp_prod_conn_str" <<EOF
ALTER TABLE cp_user_emails
  ADD CONSTRAINT email_non_zero_ln_check CHECK (char_length(TRIM(email)) > 4);

ALTER TABLE cp_user_emails
  ADD CONSTRAINT email_too_long_ln_check CHECK (char_length(TRIM(email)) < 321);

EOF
0 голосов
/ 28 февраля 2020

Это работает:

psql "$pg_cp_prod_conn_str" -f <(cat <<EOF

ALTER TABLE cp_user_emails
  ADD CONSTRAINT email_non_zero_ln_check CHECK (char_length(TRIM(email)) > 4);

ALTER TABLE cp_user_emails
  ADD CONSTRAINT email_too_long_ln_check CHECK (char_length(TRIM(email)) < 321);

EOF
)

, но это не так:

psql "$pg_cp_prod_conn_str" -c "$(<<EOF

ALTER TABLE cp_user_emails
  ADD CONSTRAINT email_non_zero_ln_check CHECK (char_length(TRIM(email)) > 4);

ALTER TABLE cp_user_emails
  ADD CONSTRAINT email_too_long_ln_check CHECK (char_length(TRIM(email)) < 321);

EOF
)"

но я понял, что мне нужно прочитать это с помощью cat, поэтому это работает:

psql "$pg_cp_prod_conn_str" -c "$(cat <<EOF

ALTER TABLE cp_user_emails
  ADD CONSTRAINT email_non_zero_ln_check CHECK (char_length(TRIM(email)) > 4);

ALTER TABLE cp_user_emails
  ADD CONSTRAINT email_too_long_ln_check CHECK (char_length(TRIM(email)) < 321);

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