psycopg2.OperationalError: Ошибка SSL SYSCALL: обнаружен EOF - PullRequest
0 голосов
/ 06 июня 2018

Я использовал psycopg2 в скрипте Python для подключения к базе данных Redshift, и иногда я получаю сообщение об ошибке, как показано ниже:

psycopg2.OperationalError: Ошибка SSL SYSCALL: обнаружен EOF

Эта ошибка возникала только один раз и 90% времени работы скрипта.

Я пытался применить его к блоку try и исключения, чтобы перехватить ошибку, но похоже, что перехват не сработал,Например, я пытаюсь зафиксировать ошибку, чтобы она автоматически отправляла мне электронное письмо, если это произойдет.Однако электронное письмо не было отправлено, когда произошла ошибка.Ниже приведен мой код для попытки, кроме:

try:
    conn2 = psycopg2.connect(host="localhost", port = '5439', 
    database="testing", user="admin", password="admin")

except psycopg2.Error as e:
    print ("Unable to connect!")
    print (e.pgerror)
    print (e.diag.message_detail)

    # Call check_row_count function to check today's number of rows and send 
      mail to notify issue
    print("Trigger send mail now")
    import status_mail
    print (status_mail.redshift_failed(YtdDate))

    sys.exit(1)
else:
    print("RedShift Database Connected")
    cur2 = conn2.cursor()
    rowcount = cur2.rowcount

Ошибки, которые я получил в своем журнале:

Traceback (последний вызов был последним): Файл "/ home / ec2-user /dradis / dradisetl-daily.py ", строка 579, в файле load_from_redshift_to_s3 ()" /home/ec2-user/dradis/dradisetl-daily.py ", строка 106, в разделителе load_from_redshift_to_s3 как ',';"" ".format (YtdDate, s3location)) psycopg2.OperationalError: Ошибка SSL SYSCALL: обнаружен EOF

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

Ответы [ 2 ]

0 голосов
/ 09 августа 2018

Из документов :

исключение psycopg2.OperationalError

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

Этоэто ошибка, которая может быть результатом многих разных вещей.

  • медленный запрос
  • процессу не хватает памяти
  • другие запросы выполняются, вызывая таблицы бытьзаблокирован на неопределенный срок
  • не хватает места на диске
  • брандмауэр

(Вы обязательно должны предоставить больше информации об этих факторах и больше кода.)

Вы успешно подключились, но ошибка OperationalError произошла позже.Попробуйте обработать эти разъединения в вашем скрипте: поместите команду, которую вы хотите выполнить, в блок try-catch и попробуйте восстановить соединение, если соединение потеряно.

0 голосов
/ 06 июня 2018

Если вы приложите фактический код, который вы пытаетесь использовать, за исключением того, что это будет полезно.В вашем подключенном стеке проследите его: «Файл» /home/ec2-user/dradis/dradisetl-daily.py », строка 106« Похоже, за исключением того, что код работает нормально для меня.учтите, e.pgerror будет пустым, если ошибка произошла на стороне клиента, например, ошибка в моем примере.объект e.diag также будет бесполезен в этом случае.

try:
    conn = psycopg2.connect('')
except psycopg2.Error  as e:
    print('Unable to connect!\n{0}'.format(e))
else:
    print('Connected!')
...