既にデータが多く入っている状態のPostgreSQLのデータベースに、新たにフィールドを追加する場合
または、削除したい場合
新たに作り直す以外に方法はありますでしょうか??
どなたかご教授お願いいたします

A 回答 (2件)

kotaeriさんにに付け加えて回答します



基本的にDBのテーブル構成を変更する場合は

ALTER コマンドを使用します。
しかしこれには制限があり
・データの構造の変更はできない
 int -> char など変更はできない
・データの領域を小さくはできない
 char[20] -> char[15] など変更はできない
 #この逆はできます。

そのほかにもあると思いますが

基本的にデータ操作を必要とする変更はできないです。

もしどうしてもやりたい場合は
テーブルの再作成が必要です!!

#私なんぞは、開発中は結構頻繁に発生するので
#テストデータなどをCSV形式で作成しておき
#登録するプログラムなどを作成して利してます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
何かで使うことを見越して、大きめにレコードを作っておく(ダミーのフィールドを作っておく)って手もありますよね・・・?
参考になりました。ありがとうございます!

お礼日時:-0001/11/30 00:00

PostgreSQLは詳しくないですけどALTER文を使えばよろしいんじゃないでしょうか?


インデックスがある場合などの削除で制限とかあるかもしれないのでALTERをキーワードにしてマニュアルで調べてくださいな。
    • good
    • 0
この回答へのお礼

なるほど・・ALTERですね・・・
専門書で、CREATE や DROP の説明があるあたりに、意外にこのあたりの説明がなかったので・・・
ではALTERで調べてみます。ありがとうございます。

お礼日時:-0001/11/30 00:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す

このQ&Aと関連する良く見られている質問

QPostgreSQLのフィールドデータ型Intervalについて

urizakaです

JSP+PostgreSQLで登録のためのシステムを作成しているのですが、その中で入力された誕生日から現在の年齢を計算し、たまったデータから後で年齢検索(たとえば20歳~29歳)を行えるようにしたいと考え、Interval(正確にはInterval Year)というフィールドを使ってみたのですが、このフィールドに

insert into exam(age) values(now() - '1999/12/31');

というようなSQL文を使ってデータを入れると

   age
----------------------------
949 days 12:59:22.1089999974

となります、今度はこのデータを年齢として取り出したいのですが、この状態からどうやって年齢を取り出して良いのかがわかりません。

select to_Char(age,'YY') from exam where code_ID =1

とSQL文を入力しても「00」という回答が帰ってきてしまいます。
どのようにすれば、ちゃんと年齢を返すようになるのでしょうか?
すみませんが、ご存知の方がいらっしゃったら教えてください。
ちなみに、

update exam set age='20years' where code_id=1

とSQL文を入力すると「20years」と入力されることにヒントがありそうな気もするのですが・・・

環境 OS:Windows2000
   DB:PostgreSQL7.2.1(Windows-Native版)
言語:Java(J2SDK1.4)

よろしくお願いします。

urizakaです

JSP+PostgreSQLで登録のためのシステムを作成しているのですが、その中で入力された誕生日から現在の年齢を計算し、たまったデータから後で年齢検索(たとえば20歳~29歳)を行えるようにしたいと考え、Interval(正確にはInterval Year)というフィールドを使ってみたのですが、このフィールドに

insert into exam(age) values(now() - '1999/12/31');

というようなSQL文を使ってデータを入れると

   age
----------------------------
949 days 12:59:22.1089999974

となり...続きを読む

Aベストアンサー

いくつか問題があるようですが。

intervalでは「年齢」がわからないので、DBの外でプログラミングが必要かと思います。
一年の長さは閏年があるので変わるし、時間の基点がないと「年齢」は分からないってこと。

数日の誤差を含んでよいなら力技がありそうだけど。

interval型は日付型ではないのでフォーマット変換もうまくいかないようですね。

QMysqlまたはPostgreSQLで、データをデータベースから読み取

MysqlまたはPostgreSQLで、データをデータベースから読み取り、コピーして書き込み可能にするような操作がありましたら教えてください。

一例として、外部・内部結合で取得したデータをコピーして書き込み可能にするようなイメージです。

このようなことは実行可能でしょうか?また似たような操作が存在しますでしょうか?
よろしくお願いします。

Aベストアンサー

SQLを使えば、
テーブルを作ることができますし、(CREATE TABLE)
データを読み込むこともできますし、(SELECT)
テーブルにデータを入れることができます。(INSERT)
原則的にテーブルというものは書き込み可能です。

ご指定のDBには詳しくないのですが、

手作業で行うなら、コマンドラインなどのCUIが単純ですが、
GUIのエディターが提供されているかもしれません。
プログラムから操作を行うのであれば、なんらかの
接続インターフェースを導入する必要があると思います。

ところで、「外部結合」ってどのような意味で使われているのでしょうか?
(OUTER JOINのことだと思ったのですが、もしかして他のデータベースのことでしょうか?)

QPostgreSQLのカラムに"user"という名前のカラムがある場合のデータ表示について

PostgreSQLを使い始めたのですが、わからないことがあるので知恵をおかしください。
ユーザー名を管理するテーブルを以下のように作成しました。
テーブル:table
 |No|user|from |
 |1 |Atom|tokyo|
 |2 |Boss|izu |
 |3 |Cat |chiba|
このテーブルのデータをuser部分のみ表示するに以下のSQL文を作成しました。
 SELECT user FROM table
上記のSQLを実行したのですが、userのカラム部分がcurrent_userとテーブルのカラムではなくセッションの情報を取得してきてしまいます。
試しに
 SELECT * FROM table
で実行するとテーブルのデータを取得でき、
 SELECT table.user FROM table
で実行するとsyntax errorとエラー表示されデータが結果が表示されません。
userをセッション情報としてではなく、テーブル(table)のデータとして取得したい場合はどのようにしたらいいのでしょうか?

よろしくお願いします。

PostgreSQLを使い始めたのですが、わからないことがあるので知恵をおかしください。
ユーザー名を管理するテーブルを以下のように作成しました。
テーブル:table
 |No|user|from |
 |1 |Atom|tokyo|
 |2 |Boss|izu |
 |3 |Cat |chiba|
このテーブルのデータをuser部分のみ表示するに以下のSQL文を作成しました。
 SELECT user FROM table
上記のSQLを実行したのですが、userのカラム部分がcurrent_userとテーブルのカラムではなくセッションの情報を取得してきてしまいます。
試...続きを読む

Aベストアンサー

「user」が予約語になっているからでしょう。

「select "user" from table」のように、「"」(ダブルクォーテーション)で囲んでみて下さい。

QアクセスのテーブルデータをCSV出力し、Nullフィールドは""にしたい場合

こんばんは。
お世話になっております。

アクセスのテーブルのデータをcsvに吐きだすと、
"あ","い","う","え",,,"お","か"

以下のようにnullフィールドは""なしで,(カンマ)だけで区切られてしまいます。
これを,"",の形にしたいのですが、出力方法の設定等あるのでしょうか?

↓こういう形を
"あ","い","う","え",,,"お","か"
↓このようにnullフィールドに""を付与したい
"あ","い","う","え","","","お","か"

ご存じの方いらっしゃいましたら是非とも教えて頂きたいと思います。
宜しくお願い致します。

Aベストアンサー

テーブルをエクスポートするのではなく
クエリでNullを""に置き換えたものをエクスポートすればいいのでは

Q重複するデータのデータベース設計方法について

はじめまして。
データベースの設計で困っています。

例えば、
学生[学生A / 学生B / 学生C]
部活[サッカー / 野球 / テニス]
とデータがあり、学生は部活のどれかに属します。(二重所属可)

これをデータベースで1つのテーブルで表すと、以下のようになると思うのですが、どちらのカラムも重複が発生します。

使用上問題なさそうなのですが、このような設計は良くないですか?

┌-------┬------┐
| 部活 | 学生 |
├-------┼------┤
|サッカー| 学生A |
├-------┼------┤
|サッカー| 学生B |
├-------┼------┤
| 野球 | 学生A |
├-------┼------┤
| テニス | 学生C |
└---------------┘

詳しい方、ご教授下さいますようお願いしますm(_ _)m

Aベストアンサー

>これなら、所属部活(学生番号、部活番号)の学生番号が何度出現しても、部活番号が何度出現しても、問題ないということですよね??

問題ありません。
通常N:Nのリレーションシップの場合は、今回のようにします。
もちろん第3のテーブルの主キーは学生番号+部活番号です。
したがって、学生番号+部活番号の組み合わせは重複できませんので念のため。


このカテゴリの人気Q&Aランキング

おすすめ情報