タグ付けされた質問 「postgresql」

PostgreSQLは、Linux、UNIX、Windows、OS Xを含むすべての主要なプラットフォームで利用できるオープンソースのオブジェクトリレーショナルデータベース管理システム(ORDBMS)です。質問する場合は、Postgresの正確なバージョンをお知らせください。管理または高度な機能に関する質問は、dba.stackexchange.comに直接送信してください。

8
Postgresの一意の制約とインデックス
ドキュメントを理解できるので、次の定義は同等です。 create table foo ( id serial primary key, code integer, label text, constraint foo_uq unique (code, label)); create table foo ( id serial primary key, code integer, label text); create unique index foo_idx on foo using btree (code, label); ただし、Postgres 9.4のマニュアルには、次のように記載されています。 テーブルに一意性制約を追加する推奨方法はALTER TABLE ... ADD CONSTRAINTです。インデックスを使用して一意の制約を適用することは、直接アクセスすべきではない実装の詳細と考えることができます。 (編集:このメモはPostgres 9.5のマニュアルから削除されました。) それは良いスタイルの問題だけですか?これらのバリアントの1つを選択した場合の実際的な結果は何ですか(パフォーマンスなど)?
156 sql  postgresql  unique 

10
Postgresデータベースのすべてのテーブルを切り捨てる
再構築する前に、PostgreSQLデータベースからすべてのデータを定期的に削除する必要があります。これをSQLで直接行うにはどうすればよいですか? 現時点では、実行する必要のあるすべてのコマンドを返すSQLステートメントを考え出すことができました。 SELECT 'TRUNCATE TABLE ' || tablename || ';' FROM pg_tables WHERE tableowner='MYUSER'; しかし、それらを取得したら、プログラムで実行する方法がわかりません。

9
Docker化されたPostgreSQLデータベースのバックアップ/復元
Docker Webサイトで説明されているように、PostgreSQLデータベースをバックアップ/復元しようとしていますが、データが復元されません。 データベースイメージで使用されるボリュームは次のとおりです。 VOLUME ["/etc/postgresql", "/var/log/postgresql", "/var/lib/postgresql"] そしてCMDは: CMD ["/usr/lib/postgresql/9.3/bin/postgres", "-D", "/var/lib/postgresql/9.3/main", "-c", "config_file=/etc/postgresql/9.3/main/postgresql.conf"] 次のコマンドでDBコンテナーを作成します。 docker run -it --name "$DB_CONTAINER_NAME" -d "$DB_IMAGE_NAME" 次に、別のコンテナーを接続して、データを手動で挿入します。 docker run -it --rm --link "$DB_CONTAINER_NAME":db "$DB_IMAGE_NAME" sh -c 'exec bash' psql -d test -h $DB_PORT_5432_TCP_ADDR # insert some data in the db <CTRL-D> <CTRL-D> 次に、tarアーカイブが作成されます。 $ …

13
SQLとアプリケーションで計算を実行する場合の長所と短所は何ですか
shopkeeper テーブルには次のフィールドがあります。 id (bigint),amount (numeric(19,2)),createddate (timestamp) たとえば、上の表があるとします。昨日のレコードを取得し、金額をセントに印刷してレポートを生成したいと思います。 1つの方法は、Javaアプリケーションで計算を実行し、簡単なクエリを実行することです Date previousDate ;// $1 calculate in application Date todayDate;// $2 calculate in application select amount where createddate between $1 and $2 次に、レコードをループしてJavaアプリケーションで金額をセントに変換し、レポートを生成します 別の方法は、SQLクエリ自体で計算を実行するようなものです。 select cast(amount * 100 as int) as "Cents" from shopkeeper where createddate between date_trunc('day', now()) - interval '1 day' …

8
varcharフィールドの型を整数に変更:「整数型に自動的にキャストすることはできません」
小さなテーブルがあり、特定のフィールドにタイプ「文字可変」が含まれています。「Integer」に変更しようとしていますが、キャストできないというエラーが表示されます。 これを回避する方法はありますか、または別のテーブルを作成し、クエリを使用してレコードをそのテーブルに取り込む必要があります。 フィールドには整数値のみが含まれます。


4
エラーの原因は何ですか:参照されたテーブルの特定のキーに一致する一意の制約はありませんか?
以下のテーブル構造の例ではエラーが発生します。参照されたテーブルの特定のキーに一致する一意の制約はなく、それを見つめていたので、この状況でこのエラーが発生する理由を理解できません。 BEGIN; CREATE TABLE foo ( name VARCHAR(256) PRIMARY KEY ); CREATE TABLE bar( pkey SERIAL PRIMARY KEY, foo_fk VARCHAR(256) NOT NULL REFERENCES foo(name), name VARCHAR(256) NOT NULL, UNIQUE (foo_fk,name) ); CREATE TABLE baz( pkey SERIAL PRIMARY KEY, bar_fk VARCHAR(256) NOT NULL REFERENCES bar(name), name VARCHAR(256) ); COMMIT; 上記のコードを実行すると次のエラーが発生しますが、これは私には意味がありません。このエラーが発生する理由を誰かが説明できます。私はpostgres 9.1を使用しています …
154 sql  postgresql 

9
Postgresql-varcharカラムのサイズをより短い長さに変更します
ALTER TABLE非常に大きなテーブル(約3,000万行)に対するコマンドについて質問があります。その列の1つはです。varchar(255)これをにサイズ変更したいと考えていvarchar(40)ます。基本的に、次のコマンドを実行して列を変更します。 ALTER TABLE mytable ALTER COLUMN mycolumn TYPE varchar(40); プロセスが非常に長くても問題はありませんが、ALTER TABLEコマンドの実行中にテーブルが読みにくくなったようです。もっと賢い方法はありますか?たぶん、新しい列を追加し、古い列から値をコピーし、古い列をドロップして、最後に新しい列の名前を変更しますか? 手がかりは大歓迎です!前もって感謝します、 注:PostgreSQL 9.0を使用しています。

20
PSQLException:現在のトランザクションは中止され、トランザクションブロックが終了するまでコマンドは無視されます
JBoss 7.1.1 Finalのserver.logファイルに次の(切り捨てられた)スタックトレースが表示されます。 Caused by: org.postgresql.util.PSQLException: ERROR: current transaction is aborted, commands ignored until end of transaction block at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2102) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1835) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:512) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:374) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:302) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.6.0_23] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [rt.jar:1.6.0_23] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [rt.jar:1.6.0_23] at java.lang.reflect.Method.invoke(Method.java:597) [rt.jar:1.6.0_23] at org.postgresql.ds.jdbc23.AbstractJdbc23PooledConnection$StatementHandler.invoke(AbstractJdbc23PooledConnection.java:455) at $Proxy49.executeUpdate(Unknown Source) at org.jboss.jca.adapters.jdbc.WrappedStatement.executeUpdate(WrappedStatement.java:371) …


4
PostgreSQLがインデックス付きの列で順次スキャンを実行するのはなぜですか?
非常に単純な例-1つのテーブル、1つのインデックス、1つのクエリ: CREATE TABLE book ( id bigserial NOT NULL, "year" integer, -- other columns... ); CREATE INDEX book_year_idx ON book (year) EXPLAIN SELECT * FROM book b WHERE b.year > 2009 私に与える: Seq Scan on book b (cost=0.00..25663.80 rows=105425 width=622) Filter: (year > 2009) 代わりにインデックススキャンを実行しないのはなぜですか?何が欠けていますか?



3
特定のスキーマにテーブルが存在するかどうかを確認する方法
Postgres 8.4以降のデータベースには、publicスキーマ内の共通テーブルとスキーマ内の会社固有のテーブルが含まれていcompanyます。 companyスキーマ名は常に'company'会社番号で始まり、会社番号で終わります。 したがって、次のようなスキーマがある場合があります。 public company1 company2 company3 ... companynn アプリケーションは常に1つの会社で動作します。同様に、ODBCまたはNpgsqlの接続文字列に応じて指定されています。search_path search_path='company3,public' 特定のcompanynスキーマが指定されたスキーマに存在するかどうかをどのように確認しますか? 例えば: select isSpecific('company3','tablenotincompany3schema') 返す必要がありますfalse、と select isSpecific('company3','tableincompany3schema') 戻る必要がありtrueます。 いずれの場合も、関数はcompanyn渡されたスキーマのみをチェックし、他のスキーマはチェックしないでください。 指定されたテーブルがpublic、渡されたスキーマの両方に存在する場合、関数はを返す必要がありますtrue。 Postgres 8.4以降で動作するはずです。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.