• ベストアンサー

PostgreSQLでテーブルの項目の操作

例えば、 1.create table shinamono (hinmei text,nedan,int); で作成済みのテーブルへbikou項目を追加するにはどうすればいいのでしょうか? 2.create table shinamono (hinmei text,nedan,int); で作成済みのテーブルのnedanの項目を削除するには? 3.create table shinamono (hinmei text,nedan,int); で作成済みのテーブルのnedanの項目名を修正するには? 上記の様な操作は出来るのでしょうか? よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#1785
noname#1785
回答No.1

# PostgreSQLにそんなに詳しいわけではありませんが・・・。 まず、PostreSQLはSQL92準拠なので、項目の追加は下記の要領でできますので、1.は可能です。 alter table table名 add(カラム名 型(桁数)); ただし、項目の削除はできませんので、2.3.は不可能です。 3.までの操作をしたいのであれば、 1)PSQLでcopyコマンドを使用してDBの内容をサーバー上にテキストファイルで落とす。 2)テーブルをすべて削除して作り直す 3)PSQLのcopyコマンドを使って、DB内に1)で待避したデータを読み込ませる で対処できるかと思います。 PSQLやcopyコマンドの詳細については、PostgreSQLの解説本の最初に載っていますので、そういった資料をご参照ください。

arlie
質問者

お礼

ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • castの使用法について(初心者です)

    始めまして。初心者ですので基本的な質問になるかもしれませんがよろしくお願いします! なぜかPostgreSQLを仕事に使うことになり、四苦八苦しています。 テーブルを作成しているときに、 create table syouhin (shinamono text, nedan int); とするとします。 で、insert でデータを入れていきますが、 例: shinamono | nedan ------------------ みかん |100 マンゴー |200 例えば、nedan のcast が今、int にしましたが、これをchar やfloatに変えたいときはどうすればよろしいのでしょうか? どなたか御存じの方、お手数ですがお教え下さい!!!

  • postgreSQLでint8で設定された項目にデータを挿入したいのですが、教えて下さい。

    例えば、下記のようなテーブルを作成し、 create table testm ( data1 int8, data2 int8, data3 int8 ); 普通全ての項目に値があれば、1行挿入することができますが、 insert into testm values (1, 2, 3); もし、値がないのに、項目に挿入したい場合は、できるのでしょうか? insert into testm values (1, , 3); 教えて下さい。それが出来なかった場合の対処方法も教えて下さい。

  • postgresをAccessから操作、しかし#Deleted ?

    postgresでテーブルを作成 CREATE TABLE test_table (id serial , name text); というテーブルを作成しODBCを使いaccessからデータを追加すると なぜかすべての行に #Delete と表示されてしまいます。 しかし更新をするとAuto Numberもしっかり振られないようも更新されているのですが いまいち理解できません。 もし、対策がお分かりの方がいましたらご教授お願いいたします。

  • PerlでSQLiteのデータテーブルを作成し

    PerlでSQLiteのデータテーブルを作成し、作成したテーブルへデータを追加するようにしたいのですが、 下記のように作成し、実行すると、 テーブルの作成のみ、もしくは、既存のテーブルへのデータの追加のみは可能なのですが、 両方処理させると、テーブルの作成のみされて、作成されたテーブルの中身はカラのままです。 #データベースに接続 $dbh = DBI->connect("dbi:SQLite:dbname=c:\\database\\tyumon.db"); open (DATA,"c.dat"); $data = <DATA>; close(DATA); $data = $data+1; $table = "user"; $table .= $data; #テーブル作成実行 $hst = $dbh->do("CREATE TABLE '$table'(name text,area text,tel text,mail text,jikan text, hoka text)"); #レコードの追加(INSERT文の実行) $st = $dbh->do("insert into '$table' values('$data','$name','$area','$tel','$mail','$jikan','$hoka')"); 「c.dat」には、カウントされた数字が入っています。 テーブル名は「user」+カウント数字で作成しています。 データベースと、CGIの勉強を兼ねて作成しているもので、 根本的な間違いなどあるかもしれません。 どなたか、ご指摘いただければ幸いです。

    • ベストアンサー
    • CGI
  • CでSQLのテーブルを読む

    SQLのテーブルがあります。 レコードを1行ずつ読むソースを教えてください。 データベースはさっぱり分かりません。 create table mytable (  name text,  age int ); このテーブルからint型のageを列挙したいと思います。 intを読むわけですから EXEC SQL BEGIN DECLARE SECTION; int i; EXEC SQL END DECLARE SECTION; が必要ですよね。あとはさっぱり分かりません。

  • テーブル項目の初期化につきまして

    いつも参考に読ませて頂いております、佐藤と申します。 char[] abc; int[] n1; 上記のようにキャラや数値のテーブル項目を使用するようにプログラムを作成しておりますが、コンパイル時に「変数○○は初期化されてない可能性があります」とのエラーが出てきます。 テーブル項目の初期化の方法を教えて頂きたいのですが、ご存知の方はいらっしゃいますか? 宜しくお願い致します。

  • 日付型項目のNULLについて(PostgreSQL)

    よろしくお願いします。 下記内容のtest_tableを作成して ---- CREATE TABLE "test_table" ( "id" varchar(10) NOT NULL, "fdate" date ); ---- 下記内容のデータを登録しました。 ---- insert into test_table(id,fdate) values ('abc',NULL); ---- 下記のsqlでデータを取得できませんでした。 どうしてでしょうか? select * from test_table where fdate = NULL;

  • PostgreSQLで外部DB内のテーブル参照方法を教えてください

    PostgreSQLで別データベースのテーブルを参照することはできますか? 仮に以下のデータベースが2つあるとします CREATE DATABASE common_db ... CREATE DATABASE app1_db ... app1_db に接続した状態で common_db のテーブルを参照することはできますか? 仮にcommon_dbに郵便番号テーブル postcodeがあるとします CREATE TABLE postcode ( postcode text, --郵便番号 pref_name text, -- 県名  ・・・ ) このpostcodeテーブルをapp1_dbに接続した状態で参照するには、どのような参照クエリになりますか? ご教授の程よろしくお願います。 そもそもできないのでしょうか?

  • オラクルでデータベースに項目を追加する場合に

    オラクル初心者です教えてください。 バージョンが関係あるのかは分かりませんが、8.1.7です。 AAAテーブルに10個の項目があり、真中に項目を追加する場合に、今入っているデータを生かしたい場合にどうやってやればよいのでしょうか? ↓領域を増やす場合などはこうやっているのですが  項目がずれているので駄目ですよね? CREATE TABLE BBB AS SELECT * FROM AAA DROP TABLE AAA CREATE TABLE AAA(真ん中に項目追加後) INSERT INTO AAA SELECT * FROM BBB やっぱりINSERT分に項目を全部書かないとだめなのでしょうか?

  • 複数テーブルで ID の一意性を保つ

    Debian GNU/Linux 3.1 で psql 8.1.2 を使用しています。 下記の要領でテーブルを作成し、2つのテーブルでIDが重ならないようにしようと意図しました。 CREATE TABLE t1 ( t1_id int2 UNIQUE NOT NULL, t1_name text NOT NULL ); NOTICE: CREATE TABLE / UNIQUE will create implicit index "t1_t1_id_key" for table "t1" CREATE TABLE CREATE TABLE t2 ( t2_id int2 UNIQUE NOT NULL, t2_name text NOT NULL ); NOTICE: CREATE TABLE / UNIQUE will create implicit index "t2_t2_id_key" for table "t2" CREATE TABLE CREATE FUNCTION unique_t12_id(int2) RETURNS BOOLEAN AS 'SELECT NOT ( EXISTS(SELECT * FROM t1 WHERE t1_id = $1) AND EXISTS(SELECT * FROM t2 WHERE t2_id = $1) );' LANGUAGE SQL; CREATE FUNCTION ALTER TABLE t1 ADD CONSTRAINT con_unique_t12 CHECK (unique_t12_id(t1_id)); ALTER TABLE ALTER TABLE t2 ADD CONSTRAINT con_unique_t12 CHECK (unique_t12_id(t2_id)); ALTER TABLE ところが実際は上手くいきませんでした。 INSERT INTO t1 VALUES(1, 'test1'); INSERT 0 1 INSERT INTO t2 VALUES(2, 'test2'); INSERT 0 1 INSERT INTO t2 VALUES(2, 'test3'); ERROR: duplicate key violates unique constraint "t2_t2_id_key" # ここまでは期待通りの挙動です INSERT INTO t2 VALUES(1, 'test4'); INSERT 0 1 ここで制約が働いて欲しかったのですが、素通りでINSERTされています。 下記のように、操作後の関数の戻り値は「偽」なのでこの操作は制約に引っかかると思うのですが 何故意図したように動かないのでしょうか。 SELECT *,unique_t12_id(t2_id) FROM t2; t2_id | t2_name | unique_t12_id -------+---------+--------------- 2 | test2 | t 1 | test4 | f (2 rows) スペースが詰まって読みづらい箇所もありますが、よろしくお願いします。

EdgeとChromeが起動しなくなった
このQ&Aのポイント
  • ESET Internet Security 16.0.22.0になってから、EdgeとChromeが起動しなくなりました。
  • ESETをアンインストールすると、起動し、再度インストールすると、また起動しなくなるため、ESETが原因だと思われます。
  • どの設定を変更すれば解決するかわかりません。
回答を見る