Pages - Menu

2019年12月5日 星期四

[Docker]PostgreSQL問題總集

前言

距離上一次用這個資料庫已經很久了,
這次自己架設才發現一堆問題。
其中有,資料表、欄位名稱大小寫,遠端連線,Docker安裝方式、Python連線方式



正文

1.Postgre資料表及欄位大小寫

照一般寫SQL以及程式命名的習慣,都用駝峰式命名原則,
結果再寫Postgres的時候就踢到鐵板了,一直跟我說該欄位不存在。
後來一查,才知道建立table或column時,如果有大寫字母,沒關係。
但在查詢的時候,要針對大寫的字母加上雙引號(”)
今天表格名稱叫abcRecord,
那查詢時要寫成

select * from “abcRecord”

欄位也是一樣,在abcRecord內有一個欄位為  userInfo
那寫的時候也必須加上雙引號

select * from “abcRecord” where “userInfo”=10

2.Docker架設Postgres

在hub.docker裡面就有Postgres的原始說明
經過我後續的拼拼湊湊,最終結果是這段。

docker run -d  -p 3001:5432 --name postgres -e POSTGRES_USER=admin-e POSTGRES_PASSWORD=Xdsasbva -v ~/pgdata:/var/lib/postgresql/data postgres

參數說明,請看  [Docker]常用指令大集合

3.Docker架設Mongo

因為要改一堆設定,才有辦法設定不允許外部連線,
但想了想,這台伺服器我打掉重練的次數可能會很頻繁,
如果每次都要重新設定,那就失去用docker的意義了。
(其實是我玩不出來,就懶得在測試了XD)

docker run -d --name mongodb -v ~/mongo:/data/db -v /home/user/mongo.conf:/etc/mongo.conf -p 3001:27017 mongo

需掛載兩個volume,要打兩次-v

4.Postgres遠端連線設定

從2的地方可以得知,我們將container內的 postgresql/data跟 實體的pgdata連在一起,
故直接到pgdata內尋找以下兩個檔案,並確認下面的參數
1.postgresql.conf

listen_addresses =’*’
port = 5432

pb_hba.conf

host all all 0.0.0.0/0 password

再來可以利用 dbeaver 這套軟體測試連線至Postgres

5.Python連線方式


import psycopg2
conn = psycopg2.connect(database="forex", user="admin", password="Xassdfva", host="123.456.78.9", port="3001")
try:
    cursor = conn.cursor()
# 如果有欄位或資料表名稱大寫,必須加上"" 包起來
    postgres_insert_query = """ INSERT INTO "faddRecord" (account,balance,equity,"createDate") VALUES (%s,%s,%s,CURRENT_DATE)"""
    record_to_insert = ('3223231', 10932, 950)
    cursor.execute(postgres_insert_query, record_to_insert)
    conn.commit()
    count = cursor.rowcount
    print (count, "Record inserted successfully into mobile table")
except (Exception, psycopg2.Error) as error :
    if(conn):
        print("Failed to insert record into mobile table", error)
finally:
    #closing database connection.
    if(conn):
        cursor.close()
        conn.close()
        print("PostgreSQL connection is closed")

如果安裝psycopg2失敗的話,請看  [Scrapyd]在Scrpayd container內安裝postgreSQL


ref.PostgreSQL中表名、欄位名大小寫問題
如何設定PostgreSQL允許被遠端訪問
[程式][Postgresql] 如何遠端連線?
Python PostgreSQL Insert, Update and Delete table data to Perform CRUD Operations
PostgreSQL日期時間DATE/TIME

沒有留言:

張貼留言