xmlTextReaderRead

xmlTextReaderReadで、次なるノードが見つかるまで移動していく。

Module xmlreader from libxml2
libxml2 で XMLTextReader を使ってみる - えがわたにっき

戻り値1の時は、次のノードが見つかった場合で、その場合は繰り返す。0の場合は、ノードがなくなった場合なので、終了する。
で実行すると、

$ vi main.c
$ gcc main.c -o main -I/usr/include/libxml2 -lxml2
$ ./main
reader = 0x019679c0
Move Next Node!
Move Next Node!
Move Next Node!
Move Next Node!
Move Next Node!
Move Next Node!
Move Next Node!
Move Next Node!
Move Next Node!
Move Next Node!
Move Next Node!
Move Next Node!
Move Next Node!
Move Next Node!
Move Next Node!
Move Next Node!
Move Next Node!
Move Next Node!
Move Next Node!
Move Next Node!
Move Next Node!
Move Next Node!
Move Next Node!
Move Next Node!
Move Next Node!
Move Next Node!
Move Next Node!
End of move!
$

結構な数のノードがある。

Sample/libxml/xmlTextReaderRead/xmlTextReaderRead/src/xmlTextReaderRead at master · bg1bgst333/Sample · GitHub

DELETE

DELETEは、指定の行を削除するSQL文。

DELETE
2.9. 削除

"Saburo"の行を削除する。

testuser1db=> SELECT * FROM user_profile;
  name  | address | age
--------+---------+-----
 Taro   | Tokyo   |  30
 Saburo | Nagoya  |  26
 Jiro   | Sendai  |  28
(3 行)

testuser1db=> DELETE FROM user_profile WHERE name = 'Saburo';
DELETE 1
testuser1db=> SELECT * FROM user_profile;
 name | address | age
------+---------+-----
 Taro | Tokyo   |  30
 Jiro | Sendai  |  28
(2 行)

testuser1db=>

WHEREで削除する行の条件を指定。
今回はnameが"Saburo"の行を削除。
削除できた。

UPDATE

UPDATEは、指定の行を更新するSQL文。

UPDATE
2.8. 更新

"Jiro"のaddressを"Sendai"に変更する。

testuser1db=> SELECT * FROM user_profile;
  name  | address | age
--------+---------+-----
 Taro   | Tokyo   |  30
 Jiro   | Osaka   |  28
 Saburo | Nagoya  |  26
(3 行)

testuser1db=> UPDATE user_profile SET address = 'Sendai' WHERE name = 'Jiro';
UPDATE 1
testuser1db=> SELECT * FROM user_profile;
  name  | address | age
--------+---------+-----
 Taro   | Tokyo   |  30
 Saburo | Nagoya  |  26
 Jiro   | Sendai  |  28
(3 行)

testuser1db=>

SETの後ろに、セットする列名と値。
WHEREの後ろに、セットする行の条件。
更新できた。

SELECT

SELECTは、テーブルやビューに、データ取り出しの問い合わせをするSQL文。

SELECT
2.5. テーブルへの問い合わせ

SELECTの後ろが'*'だと、すべての列を取り出すが、列を選ぶこともできる。

testuser1db=> SELECT * FROM user_profile;
  name  | address | age
--------+---------+-----
 Taro   | Tokyo   |  30
 Jiro   | Osaka   |  28
 Saburo | Nagoya  |  26
(3 行)

testuser1db=> SELECT name , age FROM user_profile;
  name  | age
--------+-----
 Taro   |  30
 Jiro   |  28
 Saburo |  26
(3 行)

testuser1db=> SELECT name , address FROM user_profile;
  name  | address
--------+---------
 Taro   | Tokyo
 Jiro   | Osaka
 Saburo | Nagoya
(3 行)

testuser1db=> SELECT address , age FROM user_profile;
 address | age
---------+-----
 Tokyo   |  30
 Osaka   |  28
 Nagoya  |  26
(3 行)

testuser1db=> SELECT age , name FROM user_profile;
 age |  name  
-----+--------
  30 | Taro
  28 | Jiro
  26 | Saburo
(3 行)

testuser1db=>

SELECTの後ろに、列名を指定することで、その列だけのデータを抽出できる。
カンマで複数指定できる。
順番も変えられる。

INSERT

INSERTは、テーブルに行を挿入するSQL文。

INSERT
2.4. テーブルに行を挿入

user_profileに、nameが"Taro"、addressが"Tokyo"、ageが30という行と、
nameが"Jiro"、addressが"Osaka"、ageが28という行と、
nameが"Saburo"、addressが"Nagoya"、ageが26という行を挿入する。

testuser1db=> INSERT INTO user_profile VALUES ( 'Taro' , 'Tokyo', 30 );
INSERT 0 1
testuser1db=> INSERT INTO user_profile VALUES ( 'Jiro' , 'Osaka', 28 );
INSERT 0 1
testuser1db=> INSERT INTO user_profile VALUES ( 'Saburo' , 'Nagoya', 26 );
INSERT 0 1
testuser1db=> SELECT * FROM user_profile;
  name  | address | age
--------+---------+-----
 Taro   | Tokyo   |  30
 Jiro   | Osaka   |  28
 Saburo | Nagoya  |  26
(3 行)

testuser1db=>

3つ挿入できた。
テーブル全体の問い合わせ表示は、SELECT * FROM <テーブル名>を使う。

2.5. テーブルへの問い合わせ

CREATE TABLE

CREATE TABLEは、新しいテーブルを作成するSQL文。

CREATE TABLE
2.3. 新しいテーブルの作成

testuser1dbに、新しいテーブルuser_profileを作成する。

[testuser1@localhost ~]$ psql testuser1db
psql (11.7)
"help" でヘルプを表示します。

testuser1db=> CREATE TABLE user_profile ( name varchar(32) , address varchar(256) , age int );
CREATE TABLE
testuser1db=> \dt
                リレーション一覧
 スキーマ |     名前     |    型    |  所有者  
----------+--------------+----------+-----------
 public   | user_profile | テーブル | testuser1
(1 行)

testuser1db=>

作成できた。
\dtでテーブル一覧が見れる。
最初、"user"で作ろうとしたら、エラーが出た。
予約されてんのかな・・・。

createdb

createdbは、新しいデータベースを作成する。

createdb

こちらは、またPostgreSQLクライアントアプリケーションのラッパーコマンド。

CentOS で PostgreSQL を使ってみよう!(2) | Let's Postgres

ここにあるように、postgresユーザから、testuser1名義でデータベースを作ってみる。

[postgres@localhost ~]$ createdb testuser1db -U testuser1
createdb: データベース template1 に接続できませんでした: FATAL:  ユーザ "testuser1" で対向(peer)認証に失敗しました
[postgres@localhost ~]$

"FATAL: Ident authentication failed"とは違う気がするが、とにかく失敗する。
Linuxユーザのtestuser1になってから、もう一度実行。

[postgres@localhost ~]$ exit
ログアウト
[root@localhost bg1]# su - testuser1
[testuser1@localhost ~]$ createdb testuser1db
[testuser1@localhost ~]$ psql -l
                                           データベース一覧
    名前     |  所有者   | エンコーディング |  照合順序   | Ctype(変換演算子) |     アクセス権限      
-------------+-----------+------------------+-------------+-------------------+-----------------------
 postgres    | postgres  | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
 template0   | postgres  | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres          +
             |           |                  |             |                   | postgres=CTc/postgres
 template1   | postgres  | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres          +
             |           |                  |             |                   | postgres=CTc/postgres
 testuser1db | testuser1 | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
(4 行)

[testuser1@localhost ~]$

今度は作成できた。