ホーム › フォーラム › A5:SQL Mk-2掲示板 › テーブルエディタでペーストした際、Not NULL制約の項目に空文字を設定したい
- このトピックには7件の返信、2人の参加者があり、最後ににより6年前に更新されました。
-
投稿者投稿
-
kiゲスト
お世話になります。
トピックスの件につきましてご教授頂ければと思います。
【環境】
A5:SQL Version:2.13.2
DB:Postgresqlテーブルエディタへレコードは貼り付けた際、NULL許容のtext型に空文字が入りますが、NOT NULL制約のtext型で同じ事を行うと、「フィールド ‘フィールド名’ の値が必要です」と表示され、空文字を挿入する事が出来ません。
SQL文のinsert文では”でNOT NULL制約のtext型に空文字を設定する事が可能です。
尚、テーブルエディタではShift+Del(又は右クリックの「NULLを入力する」)でNULLを設定する事が可能ですが、空文字を設定する内容がありませんでした。テーブルエディタでNOT NULL制約のtext型に空文字を入力するためには何か設定が必要でしょうか?
松原正和キーマスターkiさんこんにちは。
はい、確かにShift+DELでNULLは入力できたのですが、NULLの状態から空文字を入力する簡単な方法はありませんでした。いったん何か値を入力し、別のカラムに移ってから元のカラムに戻し、入力した文字をDELで削除する必要があります。
そこで、Version 2.14.0 beta 9でShift+DELをNULLでないときはNULLの入力、NULLのときは空文字の入力のトグル動作に変更してみました。如何でしょうか。
kiゲスト松原様
ご対応ありがとうございます。
何点か御座います。
1.Version 2.14.0 beta 9にて、Shift+DelでNULLと空白の切り替えができない様です。
変更履歴にある、「« NULL »」の対応による影響でしょうか?2.私が余計な事を書いたのか論点がずれてしまいました。
グリッドにデータを貼り付ける際、NOT NULL制約に対して空白を設定する事が出来ないのです。
NOT NULL制約あり:« NULL »でNULL挿入、\tでNULL挿入
NOT NULL制約なし:« NULL »でNULL挿入、\tで空白挿入NULLを確実に入れる仕様にするためかとは思いますが、NOT NULL制約に対して、オプション等で必ずNULLなのか、NULLと空白を分けて挿入可能にするか出来ましたら幸いです。
松原正和キーマスターki さんこんにちは。
Shift+DELによる空文字の入力はOracleの場合効かない(Oracleは空文字はNULLとして扱うため)のですが、PostgreSQLでしたでしょうか?。
テーブルエディタへの貼り付けの際、文字列項目かつNOT NULLで空文字列(またはNULL)を張り付けた場合は、空文字として扱うようにしてみました。
本日(9/2)にリリース予定のVersion 2.14.0 beta 11で修正します。
ytゲスト横から失礼致します。
私の環境(beta9,11,16で確認)でもShift+DelでNULLと空白の
切り替えができなかったので、ご報告いたします。【環境】
A5:SQL Version:2.14.0 beta 9,11,16
DB:Postgresql【現象が起きたテーブル】
create table “public”.test_table (
code text default ” not null
, name text default ” not null
, primary key (code)
);あと同じ問題かは分かりませんが、
別の手段で強引にNotNull項目に空白をセットしたデータを作成し
そのレコードの別の項目を変更すると、以下のようなエラーメッセージが表示されました。—————————
A5:SQL Mk-2 64bit edition Version 2.14.0 beta 11
—————————
Update failed. Found 0 records
—————————
OK
—————————松原正和キーマスターytさんこんにちは。
Shift+DelによるNULLと”の切り替えですが、たとえば、Oracleでは”はNULLの意味なのでトグルできないように制御していますが…PostgreSQLなのですよね。
なかなか再現できないのですが、具体的にはどのような動きになっているのでしょうか?。(たとえば、NULLにはなるが、何度Shift+Delを押下しても ” にならないとか)「別の手段で強引にNotNull項目に空白をセットしたデータを作成しそのレコードの別の項目を変更」の件ですが、A5:SQL Mk-2でテーブル内容を表示した後、別のツールで主キーを変更すると、A5:SQL Mk-2はその変更を認識できないので更新時にレコードを見つけることができず、「Update failed. Found 0 records」になってしまいます。
ytゲスト以下のような手順であらためて確認してみました。(2.14.0 beta 17)
①PostgreSQL(9.6.1)で以下のようなDBを用意する。
12345678910111213141516171819202122SET statement_timeout = 0;SET lock_timeout = 0;SET idle_in_transaction_session_timeout = 0;SET client_encoding = 'UTF8';SET standard_conforming_strings = on;SET check_function_bodies = false;SET client_min_messages = warning;SET row_security = off;SET search_path = public, pg_catalog;SET default_tablespace = '';SET default_with_oids = false;CREATE TABLE test_table (code text DEFAULT ''::text NOT NULL,name text DEFAULT ''::text NOT NULL);ALTER TABLE test_table OWNER TO postgres;COPY test_table (code, name) FROM stdin;2 bbaa\.ALTER TABLE ONLY test_tableADD CONSTRAINT test_table_pkey PRIMARY KEY (code);②-1 Shift+DELを1回押す
→NULLが入る
②-2 もう一度Shift+DELを押す
→表示上は何も変わらない
②-3 その状態で下キーを押す
→「フィールド’XXXX’の値が必要です」とエラーになる③-1 A5:SQLを再起動する。
③-2 codeが空の行のnameを「cc」に書き換える。
→「Update failed. Found 0 records」とエラーになる。松原正和キーマスターytさんこんにちは。
A5:SQL Mk-2でPostgreSQLに接続するとき、使用しているライブラリの制限(仕様?)でtext型に空文字列を設定できず、NULLとして解釈するようです。どうも内部的にCLOBとして扱っていることに何か関係がありそうです。
とりあえずの解決策としてはオプションダイアログで「PostgreSQL」タブの「TEXT型をラージオブジェクト(CLOB)型ではなく、文字列型として扱う。」をチェックすると、空文字列を設定できますが、8192バイトまでしか扱えなくなるのでデータによっては注意が必要です。
-
投稿者投稿