- 1. 概要
- 2. 準備
- 3. パッケージ作成
- 4. crate を使う
- 5. 実行
1. 概要
「Rust」をさわり始めて、4日目かな。
データベースへアクセスしてみようと思います。
わはは、無謀じゃろか?
本ページは、下記のサイトを参考にさせていただきました。
「Rust で PostgreSQL に接続する」
「postgres - crates.io: Rust Package Registry」
データベース関係のサンプルコードは、あちこちにあるんじゃけど。
「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 (/usr/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 沖縄県
わはは、でけた。
|