refirio.org
気ままな雑記帳&実験場。好き勝手に色々やっています。
エントリー
タグ「PostgreSQL」の検索結果は以下のとおりです。
PostgreSQLメモ
- 2013/10/24 14:27
- カテゴリー:制作, プログラム
- タグ:PHP, PostgreSQL
テーブルを扱うためのメモ。
SQLでテーブル一覧を表示
SELECT
pg_class.relname AS relname
FROM
pg_class INNER JOIN pg_namespace
ON
pg_class.relnamespace = pg_namespace.oid
WHERE
pg_class.relkind = 'r' AND pg_namespace.nspname = 'public';
SQLでテーブル仕様を表示
SELECT
column_name, data_type, is_nullable
FROM
information_schema.columns
WHERE
table_schema = 'public' AND table_name = 'テーブル名';
SQLでテーブル作成コードを表示
SELECT
CASE
WHEN tb.relkind = 'r' THEN(
SELECT 'CREATE TABLE "テーブル名"(' || chr(10) || array_to_string(
ARRAY(
SELECT ' "' || "Column" || '" '|| "Type" || "Modifiers" || "Index" FROM(
/* Column */
SELECT
at.attnum, ns.nspname AS schema, tb.relname AS table, at.attname AS "Column",
/* Type */
CASE
WHEN at.attinhcount <> 0 OR at.attisdropped THEN null
ELSE
CASE
WHEN tp.typname = 'int2' THEN 'SMALLINT'
WHEN tp.typname = 'int4' THEN 'INTEGER'
WHEN tp.typname = 'int8' THEN 'BIGINT'
WHEN tp.typname = 'float4' THEN 'REAL'
WHEN tp.typname = 'float8' THEN 'DOUBLE PRECISION'
WHEN tp.typname = 'bpchar' THEN 'CHAR'
ELSE UPPER(tp.typname)
END ||
CASE
WHEN at.attlen >= 0 THEN ''
WHEN at.atttypmod < 4 THEN ''
WHEN tp.typname <> 'numeric' THEN '(' || at.atttypmod - 4 || ')'
WHEN (at.atttypmod & 65535) = 4 THEN '(' || (at.atttypmod >> 16) || ')'
ELSE '(' || (at.atttypmod >> 16) || ',' || (at.atttypmod & 65535) - 4 || ')'
END
END AS "Type",
/* Modifiers */
CASE
WHEN at.attnotnull THEN ' NOT NULL'
ELSE ''
END ||
CASE
WHEN ad.adbin IS NULL THEN ''
ELSE ' DEFAULT ' || UPPER(pg_get_expr(ad.adbin, tb.oid))
END AS "Modifiers",
/* one-column Index */
CASE
WHEN ix.indexrelid IS NULL THEN ''
ELSE
CASE
WHEN ix.indisprimary THEN ' PRIMARY KEY'
WHEN ix.indisunique THEN ' UNIQUE'
ELSE ''
END
END AS "Index"
FROM
pg_attribute at
INNER JOIN pg_type tp ON at.atttypid = tp.oid
LEFT OUTER JOIN pg_attrdef ad ON ad.adrelid = tb.oid AND ad.adnum = at.attnum
LEFT OUTER JOIN pg_index ix ON ix.indrelid = tb.oid AND ix.indnatts = 1 AND at.attnum = ix.indkey[0]
LEFT OUTER JOIN pg_class ic ON ix.indexrelid = ic.oid
LEFT OUTER JOIN pg_am am ON ic.relam = am.oid
WHERE
tb.oid = at.attrelid AND at.attnum >= 1
) AS columns ORDER BY attnum
), ',' || chr(10)
)
||
(
SELECT
CASE
WHEN COUNT(*) = 0 THEN ''
ELSE ',' || chr(10) || ' ' || array_to_string(
ARRAY(
SELECT
CASE
WHEN indisprimary THEN 'PRIMARY KEY '
ELSE 'UNIQUE '
END
|| substr(indexdef, strpos(indexdef, '('), strpos(indexdef, ')') - strpos(indexdef, '(') + 1) || ' /* '||index||' */'
FROM
(
SELECT
ic.relname AS index, ns.nspname AS schema, tb.relname AS table --, ia.attname, ia.attnum
, ix.indnatts, ix.indisunique, ix.indisprimary, am.amname
, ix.indkey
, pg_get_indexdef(ic.oid) AS indexdef
FROM
pg_index ix
INNER JOIN pg_class ic ON ix.indexrelid = ic.oid
INNER JOIN pg_am am ON ic.relam = am.oid
WHERE
ix.indrelid = tb.oid AND ix.indnatts > 1 AND (ix.indisprimary OR ix.indisunique)
) AS def ORDER BY indisprimary desc, index
), ','||chr(10)
)
END
FROM
pg_index ix
WHERE
ix.indrelid = tb.oid AND ix.indnatts > 1 AND (ix.indisprimary OR ix.indisunique)
) || chr(10) || ')'
)
END
FROM
pg_class tb INNER JOIN pg_namespace ns ON tb.relnamespace = ns.oid
WHERE
tb.relname = 'テーブル名'
コマンドラインでデータベースの内容をエクスポート
pg_dump -U postgres -d データベース名 > C:\~エクスポート先~\任意のファイル名.sql
コマンドラインでデータベースの内容をインポート
psql -U postgres -d データベース名 -f C:\~インポート元~\インポートするファイル
PHPでデータベースの内容をエクスポート
putenv('PGHOST=ホスト名');
putenv('PGPORT=ポート番号');
putenv('PGUSER=ユーザー名');
putenv('PGPASSWORD=パスワード');
putenv('PGDATABASE=データベース名');
print('<pre>');
passthru('"C:\\postgresql\\bin\\pg_dump.exe" -i --inserts');
print('</pre>');
exit;
WindowsのXAMPPにPostgreSQLを導入するメモ
- 2013/09/11 13:58
- カテゴリー:制作, プログラム
- タグ:PHP, PostgreSQL
PostgreSQLを導入してみたので、忘れないうちにメモ。
主な参考サイト
トラブル
PHPからPostgreSQLに接続する際、以下のようなエラーになった。
Call to undefined function pg_connect()
php.ini
で php_pdo_pgsql.dll
と php_pgsql.dll
を有効にする必要がある。それでもダメなら、Windowsの環境変数にPHPへのパス(C:\xampp\php
など)を書き込めば回避できるみたい。
コマンドプロンプトからの操作例
#ユーザー名を指定してPostgreSQLにログイン
psql -U postgres
#ユーザー名とデータベースを指定してPostgreSQLにログイン
psql -U postgres -d test
#データベース作成
CREATE DATABASE test;
#データベース一覧
¥l
#データベース選択
¥c test
#テーブル作成
CREATE TABLE sample1(
id integer,
name text
);
#テーブル一覧
\dt
#テーブル定義確認
\d sample1
#SQLを発行
INSERT INTO sample1 VALUES(2, 'test2');
SELECT * FROM sample1;
PHPからの、pg_connect()での接続例
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>テスト</title>
</head>
<body>
<?php
$con = pg_connect('host=localhost dbname=test user=postgres password=1234');
if (!$con) {
exit('データベースに接続できませんでした。');
}
$result = pg_query($con, 'SELECT * FROM sample1');
while ($data = pg_fetch_array($result)) {
echo '<p>' . $data['id'] . ':' . $data['name'] . "</p>\n";
}
$con = pg_close($con);
if (!$con) {
exit('データベースとの接続を閉じられませんでした。');
}
?>
</body>
</html>
PHPからの、PDOでの接続例
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>テスト</title>
</head>
<body>
<?php
try {
$pdo = new PDO('pgsql:dbname=test;host=localhost', 'postgres', '1234');
} catch (PDOException $e) {
exit('データベースに接続できませんでした。' . $e->getMessage());
}
$stmt = $pdo->query('SELECT * FROM sample1');
if (!$stmt) {
$info = $pdo->errorInfo();
exit($info[2]);
}
while ($data = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo '<p>' . $data['id'] . ':' . $data['name'] . "</p>\n";
}
$pdo = null;
?>
</body>
</html>
ページ移動
- 前のページ
- 次のページ
- ページ
- 1
ユーティリティ
カテゴリー
タグクラウド
- 33分探偵1
- AMBITIOUS JAPAN!1
- ARIA2
- Air2
- Android2
- BLACK CAT2
- C#1
- Chrome2
- FINAL FANTASY2
- Flash2
- GAE1
- JavaScript18
- Kindle1
- Mac2
- MySQL7
- PHP68
- PayPal1
- Perl3
- PostgreSQL2
- Python1
- Ruby1
- SQLite6
- Switch1
- TinyMCE4
- Windows Media Player1
- bot1
- fragile1
- freo53
- iPhone3
- iTunes1
- levis1
- mod_rewrite2
- node.js1
- sola1
- true tears1
- いつかのメリークリスマス1
- いつか帰るところ1
- けいおん!1
- ここにしか咲かない花3
- とある魔術の禁書目録1
- とらドラ!2
- ひぐらしのなく頃に2
- みなみけ1
- イラスト4
- ガンダム003
- クロノトリガー1
- ザナルカンドにて4
- テラ1
- ニコニコ動画8
- ハゲタカ2
- ピアノ36
- マクロスF3
- ユニットテスト1
- ルパン三世1
- ローズ・オブ・メイ4
- 初音ミク1
- 半分の月がのぼる空1
- 名探偵コナン1
- 戦場のメリークリスマス5
- 携帯10
- 攻殻機動隊1
- 桜2
- 機工魔術士1
- 決行~姫をさがして~1
- 涼宮ハルヒの憂鬱10
- 深愛2
- 灼眼のシャナ4
- 聖剣伝説2
- 蕾3
- 蟲師2
- 返信2
- 野球1
- 鋼の錬金術師1