質問 > 管理機能 > dtb_productのproduct_id関連について |
管理機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
tom79 |
投稿日時: 2013/9/10 20:09
対応状況: −−−
|
半人前 登録日: 2013/8/2 居住地: 投稿: 29 |
dtb_productのproduct_id関連について お世話になっております。
先日も色々とご回答頂き大変助かりました。 再インストール後、ログインやページ閲覧等行えていましたが 本日さらに壁にぶち当たってしまいました。 1つ目は、以前のデータベースよりインポートした商品群に対して コメントなどの編集・公開設定はできるのですが 規格編集(再登録)をするとシステムエラーとなります。 2つ目は、新規登録をすると同じようにシステムエラーとなります。 ※デザインメニューからのページ新規作成(user_data以下に作成)は問題ありません。 エラーログを確認したところ どちらもDB処理エラーが起きていて 1つ目は 引用: [Native message: ERROR: duplicate key value violates unique constraint "dtb_products_class_pkey"] 2つ目は 引用: [Native message: ERROR: duplicate key value violates unique constraint "dtb_products_pkey"] と出ます。 先日と似たような症状ですが、 外部からの閲覧・注文確定等は問題なく行えており 移行した商品ページに関しては規格の変更のみがエラーで、他は問題なく更新できます。 過去スレッド等を参照していく中で 【〜_pkeyが同じの使われててダメだよ】というエラーではないかと思っています。 現時点での私の認識として「〜_in_seq」と「〜_pkey」は 表記が違うだけで同じ役割だと思っていますが、全然違ってるかもしれないので何とも言えません。 dtb_products_classのインデックス・検査制約には 引用: 名前:dtb_products_class_pkey dtb_productsのインデックス・検査制約には 引用: 名前:dtb_products_pkey と入っています。 過去の事例では「〜_in_seq」を重複しない値に変更して解決されているようなので 同じように「〜_pkey」を変更したいのですが、そもそも「〜_pkey」のどこに値が入っているのか分かりません。 もしくは「〜_in_seq」を作成する必用があるのであればどこにどう作成したらいいのか ご教授いただけますと幸いです。 ちなみに、現時点でデータベース上にdtb_productsと付くテーブルは ・dtb_products ・dtb_products_class の2つのみで、以前のデータベースも同様です。 よろしくお願いいたします。 EC-CUBEバージョン 2.12.4 PHPバージョン PHP 5.3.15 DBバージョン PostgreSQL 8.4.8 レンタルサーバー ラピッドサイト phpPgAdmin |
sakurasaku |
投稿日時: 2013/9/10 20:45
対応状況: −−−
|
新米 登録日: 2009/10/22 居住地: 投稿: 1 |
Re: dtb_productのproduct_id関連について プライマリキー(主キー)は、レコードの出席番号のようなものです。
なので、プライマリキーに設定すると、 「フィールド(カラム)の内容は重複しないものです」 とテーブル作成時に宣言していることになります。 さて、件のエラーですが、 プライマリキーに指定しているフィールドにほかのレコードで指定されている値を 設定しようとしてエラーを出しているのだと思います。 ここで、_seq(シーケンス)ですが、 プライマリキーとは全く別の役割で、連番を発行するための仕組みです。 次に発行すべきIDは何か、記憶している感じです。 この、次に発行すべきIDが、再インストール(DBリストア?)の影響で、 初期化されているのではないでしょうか? 流れ的には、 シーケンス(**_seq) から次のID採番 ※シーケンスの情報が初期化されているためすでにテーブルにあるID発行 ↓ プライマリキー設定のフィールドにシーケンスから取得したID設定 ↓ 「プライマリキーのフィールドが重複しているよ」とエラー お調べになった、過去の事例のように、 シーケンスを設定しなおす事で解決するような気がします。 間違っていたら申し訳ありません。 ※有識者の方、説明に間違いがあればぜひ突っ込みを。。。 |
tom79 |
投稿日時: 2013/9/10 21:04
対応状況: −−−
|
半人前 登録日: 2013/8/2 居住地: 投稿: 29 |
Re: dtb_productのproduct_id関連について sakurasaku様
ご回答ありがとうございます。 早とちりする前に_seqと_pkeyが別物と分かり助かりました。 また、プライマリキーのエラー原因もなるほどと思いました。 シーケンスについてですが、データベース内を見ている限り見当たりません。。。 生成されていないのでしょうか? それとも、データベースではなくECCUBEのファイル等 見る場所が全然違うのでしょうか? よろしくお願いいたします。 |
bratech |
投稿日時: 2013/9/11 9:16
対応状況: −−−
|
長老 登録日: 2008/11/28 居住地: 福岡 投稿: 223 |
Re: dtb_productのproduct_id関連について phpPgAdminを利用されているのであれば
テーブルという項目とは別にシーケンスという項目がございませんか? そちらを見ると該当する情報が見つかるかと思います。
|
tom79 |
投稿日時: 2013/9/11 10:04
対応状況: −−−
|
半人前 登録日: 2013/8/2 居住地: 投稿: 29 |
Re: dtb_productのproduct_id関連について bratech様
ご回答ありがとうございます。 ありました! テーブルばかり目が行ってしまっていましたf^^; dtb_products_product_id_seq dtb_products_class_product_class_id_seq とも ・開始値=_idの末番号 ・最終値=開始値+1 としてみましたところ、直りました! 新規登録、既存ページの規格変更全て問題なしです。 これでようやく本来の業務に精進できそうです^^ ご回答頂きました皆様本当に有難うございますm(_ _)m |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |