Postgres Golang

Postgres Golang



Golang とも呼ばれる Go は、Google によって作成された、オープンソースでコンパイルされ、静的に型付けされるプログラミング言語です。理解しやすく、スピーディーで、明確で、パフォーマンスが高いように構築されています。

PostgreSQL (単に Postgres とも呼ばれます) は、強力なオープンソースのオブジェクト リレーショナル データベース システムです。 30 年以上にわたる積極的な開発により、その堅牢性、高度な機能、および実質的な規格への準拠に関して高い評価を得ています。

単一マシンから、多数の同時ユーザーが存在するデータ ウェアハウスや Web サービスに至るまで、広範なワークロードを処理できるように設計されています。トランザクションの整合性と耐久性を提供し、さまざまな高度なデータ型と強力で柔軟なデータ操作言語をサポートします。







このチュートリアルでは、PostgreSQL サーバーを構成して Go アプリケーションに接続する方法を説明します。



要件:

Go プログラミング言語 – Go コンパイラーがマシンにインストールされていることを確認します。



PostgreSQL データベース – PostgreSQL もインストールする必要があります。マシンに直接インストールすることも、Docker コンテナを使用してより簡単なセットアップを行うこともできます。





開発ツール – Visual Studio Code、GoLand などの Go をサポートする統合開発環境 (IDE)。

SQL と Go の基礎知識 – PostgreSQL データベースと対話するには、SQL と実行する必要があるさまざまなクエリを理解する必要があります。 Go 言語の基本的な理解も必要です。



所定の要件が満たされたら、次の手順に進むことができます。

プロジェクトのセットアップ

まずはプロジェクトのディレクトリ構造を設定しましょう。プロジェクトのソース コードを保存する必要があるメイン ディレクトリを作成します。

$ mkdir golang_postgres

ディレクトリに移動し、新しい Go モジュールを初期化します。

$ CD golang_postgres && go mod init main

必要なドライバーをインストールする

PostgreSQL データベースと対話するには、Go プログラミング言語用の PostgreSQL ドライバーが必要です。

このチュートリアルでは、PostgreSQL データベースを操作するための幅広い機能を提供する pq ドライバーを使用します。

次のコマンドを実行してインストールできます。

github.com にアクセスしてください / ライブラリ / pq

データベースを作成する

次のステップは、新しい PostgreSQL データベースを作成することです。繰り返しますが、これは PostgreSQL シェルで実行できます。

$ psql -の ポストグレ

このコマンドでは、postgres のパスワードの入力を求められます。ログが記録されたら、「データベースの作成」コマンドを実行して新しいデータベースを初期化します。

postgres=# データベース golang を作成します。
データベースの作成

指定されたコマンドは、「golang」という新しいデータベースを作成します。データベース名はお好みの名前に置き換えてください。

その後、データベースに接続して、データベースが正常に作成されたことを確認できます。

postgres=# \c golang;
これで、ユーザー「postgres」としてデータベース「golang」に接続されました。

次に、データを保存するテーブルを設定します。このチュートリアルでは、セッション情報を保存する単純なテーブルを作成します。

CREATE TABLE db_clients (
id シリアル主キー、
名前 VARCHAR(100) NOT NULL、
session_time タイムスタンプが NULL ではありません。
クエリ数 INT デフォルト 0、
active_state ブール値 デフォルト FALSE
);

指定されたクエリでは、指定されたデータベース サーバーにログインしているクライアントに関する情報を保存する「db_clients」という新しいテーブルを作成する必要があります。

Go アプリを PostgreSQL に接続する

データベースとデータベース テーブルをセットアップしたら、次に進み、Go アプリケーションを PostgreSQL サーバーに接続する方法を学習します。

まず、プロジェクトのルートに「main.go」ファイルを作成します。

$ 触る メイン.ゴー

次に、選択したテキスト エディタでファイルを編集します。

$ なぜなら メイン.ゴー

「main.go」ファイルに、次のようなソース コードを追加します。

パッケージメイン

輸入 (
「データベース/SQL」
「fmt」
'ログ'

_ 「github.com/lib/pq」
)

ファンクメイン ( ) {
connStr := 「postgres://postgres:password@localhost/golang?sslmode=disable」
データベース、エラー:= sql.Open ( 「ポストグレ」 、connStr )
もしも エラー = なし {
ログ.致命的 ( エラー )
}

もしも エラー = db.Ping ( ) ;エラー = なし {
ログ.致命的 ( エラー )
}

fmt.Println ( 「データベースに接続しました」 )
}

前のコードでは、必要なモジュールをインポートすることから始めます。次に main 関数を定義します。最後に、main 関数で、ターゲット ホスト、データベース ユーザー、データベース パスワード、および実際のターゲット データベースを指定できる接続文字列を定義します。

このモジュールは、接続文字列で次のパラメータをサポートします。

  • dbname – 接続するデータベースの名前。
  • user – サインインするユーザー。
  • パスワード – ユーザーのパスワード。
  • host – 接続先のホスト。 「/」で始まる値は Unix ドメインソケット用です (デフォルトは localhost)。
  • port – バインド先のポート (デフォルトは 5432)。
  • sslmode – SSL を使用するかどうか (デフォルトは require です。これは libpq のデフォルトではありません)。
  • fallback_application_name – 指定されていない場合にフォールバックする application_name。
  • connect_timeout – 接続の最大待ち時間 (秒単位)。ゼロまたは指定されていない場合は、無期限に待機することを意味します。
  • sslcert – 証明書ファイルの場所。ファイルには PEM エンコードされたデータが含まれている必要があります。
  • sslkey – キーファイルの場所。ファイルには PEM エンコードされたデータが含まれている必要があります。
  • sslrootcert – ルート証明書ファイルの場所。ファイルには PEM エンコードされたデータが含まれている必要があります。

必要に応じて、ターゲット接続プロパティを構成できます。 SSL と受け入れられる SSLMode パラメータを設定するには、次のチュートリアルを確認してください。 https://linuxhint.com/postgres-sslmode 。

接続プロパティに満足したら、前のコードを実行して接続が確立されているかどうかをテストできます。

実行してください。\main.go

接続すると、次の出力が表示されるはずです。

データベースに接続しました

PostgreSQL テーブルへのデータの挿入

次のステップでは、前に作成したテーブルにサンプル データを挿入します。これを行うには、挿入クエリを文字列リテラルとして定義し、db.Exec() 関数を使用してターゲット クエリを実行します。

コードは次のとおりです。

---
insertStatement := `INSERT INTO db_clients (名前、セッション時間、クエリ数、アクティブ状態)
価値観
('psql', '2023-05-26 10:15:00', 10, true),
('データグリップ', '2023-05-26 09:30:00', 5, true),
('dbeaver', '2023-05-26 11:00:00', 20, true),
('ワークベンチ', '2023-05-26 14:45:00', 15, false),
('リモート', '2023-05-26 13:20:00', 8, true);`

_、エラー = db.Exec(insertStatement)
エラーの場合 != nil {
log.致命的(エラー)
}

前のコードを実行すると、指定されたレコードがターゲット テーブルに挿入されます。

PostgreSQL クエリ データ

テーブルの行をクエリするには、select ステートメントを文字列として定義し、db.Query() を使用して実行します。 Next() 関数を使用してテーブルの行を反復処理し、次のように出力できます。

行、エラー:= db.Query ( 「SELECT * FROM db_clients」
もしも エラー = なし {
ログ.致命的 ( エラー
}
行を延期します。閉じる (

ために 行.次へ ( {
だった ID 整数
変数名文字列
var sessionTime time.Time
var クエリ数 int
var activeState bool

エラー:= 行.スキャン ( & ID & 名前、 & セッション時間、 & クエリ数、 & アクティブ状態
もしも エラー = なし {
ログ.致命的 ( エラー
}

fmt.Printf ( 'ID: %d、名前: %s、セッション時間: %s、クエリ数: %d、アクティブ状態: %t \n ID 、名前、セッション時間、クエリ数、アクティブ状態
}

もしも エラー = 行.エラー ( ;エラー = なし {
ログ.致命的 ( エラー
}

前のコードを実行すると、次の出力例に示すように、db_clients テーブルのすべての行が出力されます。

ほら、ありますよ!

結論

pq パッケージを使用して、Golang を使用して PostgreSQL データベースに接続し、クエリを実行する方法を検討しました。