Rust - データベースアクセス


クラウディア 


1. 概要
2. 準備
3. パッケージ作成
4. crate を使う
5. 実行
6. 参考サイト

1. 概要

 「Rust」をさわり始めて、4日目かな。  データベースへアクセスしてみようと思います。  わはは、無謀じゃろか?  データベース関係のサンプルコードは、あちこちにあるんじゃけど。  「Rust Cookbook」を含めて、わたしがビルドすると、ことごとくエラーになるのです。  あれこれ試行錯誤して、最後にやっと成功しそうなのが、上のサイトです。

2. 準備

 データベースは、既存の「postgreSQL」のものを持っています。  データベース名は「COLLEGE」とつけています。  ちょうどサンプルに使えそうなテーブルがあります。

CREATE TABLE IF NOT EXISTS PUBLIC.PREF
(
    CODE CHARACTER(2)  NOT NULL,
    NAME CHARACTER VARYING(16)
);
 で作成したテーブル(あれ?「INDEX」がねぇな)。  47都道府県の県コードと名称がはいっています(「都道府県コード」)。  中身は

01 北海道
02 青森県
03 岩手県

・・・	以下略	・・・
 で設定済。

3. パッケージ作成

 まず、パッケージのみを作成します。

cargo new --vcs=none postgres
 ソースを下記のように書きました。

extern crate postgres;
use postgres::{Client, Error, NoTls};

fn main() -> Result<(), Error>
{
    let mut client = Client::connect("postgresql://postgres:password@127.0.0.1:5432/college", NoTls, )?;

    for row in client.query("SELECT code, name FROM pref", &[])?
	{
        let code: String = row.get(0);
        let name: String = row.get(1);
        println!("{} {}", code, name);
    }

    Ok(())
}
 いきなり、ビルドしようとしたら

kitayama@ns.sing.ne.jp /home/hogehoge/lang/rust/database/postgres > cargo build
   Compiling postgres v0.1.0 (/パス/postgres)
error[E0463]: can't find crate for `postgres`
 --> src/main.rs:1:1
  |
1 | extern crate postgres;
  | ^^^^^^^^^^^^^^^^^^^^^^ can't find crate

For more information about this error, try `rustc --explain E0463`.
error: could not compile `postgres` due to previous error

4. crate を使う

 そう、いきなり、1行目の

extern crate postgres;
 でエラーになるわけです。  そうね、「crate(クレート)」ちゅうもんの扱い方を知らんのよ。  いままで、標準で用意されている、関数しか、使っちょらんからね。  「crate」ちゅうのは、ライブラリみたいなもん(ずばり、ライブラリそのもの?)と理解しております。  これをインストールするんだかどうだかしなきゃ、ライブラリが使えんわけですよ。  他の言語なら「pip」なり「phpcomposer」「cpan」「gem」なりがあって、それでインストールするんですが・・・。  これが見つからん。  ドキュメントの読み方が悪いんか、あっちが不親切なんかわかりませんが、まぁおそらくは、わたしが馬鹿者なんでしょうな。  小一時間以上かかりました。  やっとわかったのが、「Cargo.toml」を編集するちゅうこと。  デフォルトで、この時点で下記のようになっちょるものの

[package]
name = "postgres"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
 末尾の「[dependencies]」の行の後ろに行を追加します。  それは、「postgres」であれば、「Crate.io」の「postgres」を紹介している
postgres - crates.io: Rust Package Registry
 に

 ちゅうて書いてありました。
 わたしの目が節穴だったわけです。
 すなわち


[dependencies]
postgres = "0.19.3"
 と書くわけです。  するとビルドが通るようになります。

$ cargo build
    Updating crates.io index
   Compiling cfg-if v1.0.0
   Compiling libc v0.2.126
   Compiling autocfg v1.1.0

・・・	略	・・・

   Compiling tokio-postgres v0.7.6
   Compiling postgres v0.19.3
   Compiling postgres v0.1.0 (/home/hogehoge/lang/rust/database/postgres)
    Finished dev [unoptimized + debuginfo] target(s) in 1m 12s
 これ、「postgres」の「crate」が依存するものが全部ダウンロードされるので、初回はめちゃくちゃ時間がかかります。  2回目以降は、更新がなければ、コンパイルのみのようです。  「crate.io」からダウンロードした実物は

~/.cargo/registry/src
 へインストールされるようです。

5. 実行

 で、実行すると

01 北海道
02 青森県
03 岩手県

・・・	略	・・・

45 宮崎県
46 鹿児島県
47 沖縄県
 わはは、でけた。

6. 参考サイト

 本ページは、下記のサイトを参考にさせていただきました。
Rust で PostgreSQL に接続する」
「postgres - crates.io: Rust Package Registry

TikTok Shop 【リピート用プログラム】
AbemaTV 無料体験
U-NEXT