• 締切済み

レコードをdrop後のデータファイル内データ

基本的な質問です。 postgresql9であるレコードをdrop後にバキュームを行ないましたが データファイル({postgres_homedir}/data/base/oid/テーブルNo)でdropしたレコードの文字列が残っています。 ここからも消したいのですがどうしたら消えますか?

みんなの回答

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

vacuum fullしてみたらどうだろう。

関連するQ&A

  • ACCESS97 : レコードが長いファイルのインポートについて

    ACCESS97で、文字列を文字数ではなくバイト数で扱うことは可能でしょうか。 1レコードが20,000ByteあるテキストファイルをACCESS97のテーブルに インポートしようとしています。 インポート先のテーブルのフィールドをすべて「メモ型」にしたのですが、 インポート定義を利用してインポートを行おうとすると、 「レコードが大きすぎます。」というエラーが発生します。 そこで、プログラムでファイルを1レコードずつ読み込みながらテーブルに インサートしていく方法を取ろうかと思います。 テキストファイルは半角と全角が混在しているのですが、困ったことに 全角のデータが入るべきところに半角が混ざっている可能性があります。 たとえば、全角10文字入るべき場所に半角の空白が20文字入っていると いうような状態です。 この状態で StrConv関数でUnicodeに変換してからMidB$関数で文字を抜き 出すと、フィールドがずれてきます。 1文字目から10文字分、ではなく1Byte目から10Byte、などというように文 字列を扱うことができれば、全角と半角がどのような位置で混在していても 関係なくプログラム上で扱うことができると思うのですが,方法がわかりません。 また、これ以外で長いレコードのファイルをインポートできる方法があれば 教えていただきたいと思います。 長くなってしまいましたが、ご回答をいただけますようよろしくお願いいたします。

  • レコード内容からテーブル特定

    Oracleのデータ更新について質問させてください。 SQL文で、ある文字列を含むレコードデータを持つ、テーブルおよびレコード名を知る方法はありますでしょうか? 具体的には、DBに登録されている"google.co.jp"という文字列を"yahoo.co.jp"という文字列に全てupdateしたいのですが、 "google.co.jp"という文字列は複数のテーブルの不特定のレコードに格納されています。 全てのテーブルを1つ1つselectで見ていくしか方法は無いのでしょうか?

  • テーブルにcsvファイルをインポートできない

    かなり困っています。REDHAT LINUXでpostgresのテーブルにpsqlからのCOPYコマンドでcsvファイルのデータをインポートしようとしているのですが、文字数オーバーのエラーがでてしまいます。テーブルは2列で1つ目の列はCHAR(10)で2列目はINT4型です。csvファイルの内容はとりあえず1行だけ入れていて「"1234567890","1234"」を入れています。コマンドはpsqlで「COPY テーブル FROM 'ファイルのパス' USING DELIMITER ","」で行いました。エラーはおそらくインポートしたデータがおかしくなって変な桁数になっているのですが、どういうふうにおかしくなっているのかがよくわからないので対策できません。

  • PostgreSQLでoidを節約する

    質問があります。 ・PostgreSQLで、oidを節約する方法はあるでしょうか(create tableでWithout OIDSを指定する以外に) ・oidはPostgreSQLが管理上使うらしいのですが、具体的にはどのぐらい消費するか、計算方法はありますでしょうか。 以下、経緯です。 PostgreSQLに大量のバイナリデータを含むデータを登録するようなシステムを作ろうとしています。現在Oracleで動作しているのですが、DBを置き換える計画です。 調べたところ、バイナリデータを入れられる型としてoidとbyteaがありました。 このうちoidは、データを直接レコードに入れるのではなく、データベース全体で一意の番号を使用してバイナリデータを管理するもののようでした。この「一意の番号」というのが4バイト(32bitOSなので)しかなく、さらにこの番号はPostgreSQLも管理上使用するようです。仮に半分がバイナリデータの識別に使えるとして、21億個までデータを入れられる計算です。 充分な数のようにも思いますが、昨今のHDD事情や(1個1KBとして21億個は約2TBです)、OracleのLOBロケーターはバイナリデータの識別だけで20バイト確保されていることと比べると、「4バイト-PostgreSQLの管理使用分」というサイズはどうも不安です。 この制約を回避するためbyteaを使うことにしました。 しかしPostgreSQLにはTOASTという仕組みがあり、データが大きいときは分割して別の仮想的なテーブルに入れられ、その管理には結局oidが使われるというではありませんか。しかもデータは2000バイトづつに分割されてそれぞれにoidが付くという「浪費」っぷりです。 有償DBと比較するのもいかがなものかとは思いますし、何事にも「無限」ということはないのですが、結局バイナリデータがどれだけ入れられるのかが知りたいです。 PostgreSQLは何にどのぐらいoidを消費するか、計算方法を教えてください。 あるいは、何か勘違いをしていましたらご指摘いただけますと助かります。

  • Linux上のpostgreSQLデータをWindowsでみたい

    サーバA(OS:Linux Fedora Core 4、データベース:PostgreSQL 8.0 で運用しているシステムがあり、毎日そのデータを下記のdumpコマンドで PostgreSQLの全データをバックアップしています pg_dumpall > postgres.out  サーバAを触るのは怖いので、別のマシンB(Windows-Xp)に postgresql-8.2.6をインストールしました。 このバージョンは、postgresqlとともに、pgAdmin3というGUIの管理 ツールもついていると聞きここに、サーバAからバックアップされている postgres.outをrestoreして pgAdmin3でデータベース・テーブル等をみようとしています (postgres.out)を使ってのリストアの仕方は (1)(postgres.out)をpostgresqlの/binディレクトリの中に入れる (2)psqlのメニューから次のコマンドを打つ psql -d manmg -f postgres.out   (3)pgAdmin3を立ち上げるとサーバAのDBは追加されているようなのですが  テーブルは(0)となって見えません マシンBの方のPostgreSQLについてはインストールしたままでサーバA のpostgresqlの設定等は何もしていません 何か設定する所はあるのでしょうか 上記手順でlinuxから吐出されたバックアップデータをWindowマシンに リストアする方法は間違っていないのでしょうか よろしくお願いします。

  • 保守にVACUUMは必要か?

    PostgreSQL8.1.4を利用しています。 1日約2万件のINSERTを行うデータベース の保守を行う予定です。 PostgreSQLの保守にvacuumは欠かせないというのが 通説だとは思うのですが データベースへの操作はINSERTとSELECTだけなため VACUUMは要らないのでは?と思っています。 (少なくとも頻繁には必要ないのでは?) 但し、新しい子テーブルを毎日追加し、古いものをdropするということはやっています。 ご教授の程よろしくお願いいたします。

  • accessのレコードデータをPostgreSQLに移行したい

    accessのレコードデータをpostgreSQLに移行したいと考えています。 accessのデータをcsvファイルにエクスポートしてからposgresSQLで インポートしようと考えていました。 しかしレコードの中にEnter(改行コード)があるので、csvに変換して しまうとレコードの件数以上に行数ができてしまい、postgresSQLで インポートがうまくできませんでした。 accessのレコードにある改行コードを他の文字に変換するしか posgreSQLに移行する方法はございませんでしょうか? できれば改行コードもそのまま移行したいと考えておりますが 何か良い方法があればご教授頂ければと思います。 よろしくお願いします。

  • 任意のテーブルをdrop tableしたい

    こんにちは,よろしくお願いします。 日々の業務アプリでOracleDB上にCreateされる無数の ワークテーブルを、一日一回dropするDOSバッチを考えております。 テーブルの先頭文字列は「WAK」なのですが、それ以降 年月日字分秒を付加しているために、dropするにもテーブル名を 特定できません。 テーブル名称例) WAK20060112122354 WAK20060112144852 ・・・・ drop table コマンドで、ワイルドカードのようなものを 指定できますでしょうか? イメージとしては、「drop table WAK%1*」(%1はYYYYMMDD)の ような感じです。 環境はWin2003R2にOracle10g(10.1.0)を乗せています。 よろしくお願いします。

  • 一部のレコードをバックアップ・リストアしたい。

    PostgreSQLでデータベースのバックアップは pg_dumpで良いのですが、特定テーブルの一部のレコードを抽出したデータをMySQLに移したいのですが、どのようにすれば良いのでしょうか? Postgresqlは Linuxで7.2.3 MySQLは WindowsXPで 5.0.11 です。

  • 複数レコードのデータを1レコードへ

    お世話になります。 現在php+mysqlでシステムを構築しようとしています。 複数レコードのデータを1レコードへまとめる方法を知りたいのです。 元のデータ: 名前,グループ,詳細1,詳細2 佐藤,年齢,18,歳 佐藤,役職,本部長,, 佐藤,・・・・ ・・・ 元のデータは、このように個人の情報が300行ほどの書かれているCSVファイルです。個人ごとに存在します。(今のところ400ほど) これをmysqlにインポートするのですが、普通、そのまま4フィールドのテーブルを作ってインポートするのではなく、個人1人で1レコードのデータを持つようにすると思います。 インポート後のテーブルデータ: 名前 年齢 単位 役職 ・・・・ 佐藤 18  歳  部長 ・・・・ このように変換するには、どのような手順でするのが普通なのでしょうか?? セオリーというか考え方をお教えください。 例)まずtempテーブルにインポート後、それを加工する?? よろしくお願いいたします。