heroku에서 「ERROR: cannot execute ALTER TABLE in a read-only transaction」가 나와 곤란하다

문제



heroku의 「Heroku Postgres - Add-ons」로 행을 추가하려고 하면 「ERROR: cannot execute ALTER TABLE in a read-only transaction」라고 분노됩니다.



해결책



이러한 python에서 Postgres 데이터베이스에 액세스하는 클래스를 만듭니다.

import os
import psycopg2
import json
import pprint

class PostgreSql:
    def __init__(self):
        self.conn = self.get_connection()
        self.cur  = self.conn.cursor()

    ##############################################
    # DBコネクション取得関数
    #
    def get_connection(self):
        dsn = "host=XXXXXXXXXXXXXX\
            port=XXXX \
            dbname=XXXXXXXXXX \
            user=XXXXXXXXX \
            password=XXXXXXXXXXXXXX"
        return psycopg2.connect(dsn)

    ##############################################
    # insert関数
    #
    def insert(self, sqlStr):
        self.cur.execute('BEGIN')
        self.cur.execute(sqlStr)
        self.cur.execute('COMMIT')

    ##############################################
    # mysqlでselectする用の関数
    #
    def select(self,  sqlStr):
        self.cur.execute(sqlStr)
        return list(self.cur)

if __name__ == "__main__":

    psql = PostgreSql()

    ##############################################
    # カラムの追加
    #
    sql = "ALTER TABLE tbl_name ADD COLUMN category2 text;"
    psql.insert(sql)

만든 psql 클래스의 insert 함수를 사용하여 열을 추가합시다! !
    sql = "ALTER TABLE tbl_name ADD COLUMN category2 text;"
    psql.insert(sql)

이것으로 heroku 대시보드에서 select하여 추가되면 완료!!



이상, 「ERROR : cannot execute ALTER TABLE in a read-only transaction」의 해결 방법이었습니다.

좋은 웹페이지 즐겨찾기