пустая строка с нулевыми значениями в ненулевом поле - PullRequest
0 голосов
/ 30 августа 2010

Я использую postgresql 9.0 beta 4.

Вставив много данных в секционированную таблицу, я обнаружил странную вещь. Когда я запрашиваю таблицу, я вижу пустую строку с нулевыми значениями в полях «not-null».

Этот странный результат запроса, как показано ниже.

alt text

689-й ряд пуст. Первые 3 поля (stid, d, ticker) составляют первичный ключ. Поэтому они не должны быть нулевыми. Я использовал следующий запрос:

select * from st_daily2 where stid=267408 order by d

Я могу даже сделать группу по этим данным.

select stid, date_trunc('month', d) ym, count(*) from st_daily2 
where stid=267408 group by stid, date_trunc('month', d)

Результаты 'group by' все еще содержат пустую строку.

alt text

1-й ряд пуст. Но если я запрашиваю, где «stid» или «d» равно нулю, то ничего не возвращается.

Это ошибка в postgresql 9b4? Или какое-то повреждение данных?

РЕДАКТИРОВАТЬ:

  1. Я добавил определение таблицы.

    CREATE TABLE st_daily
    (
    stid integer NOT NULL,
    d date NOT NULL,
    ticker character varying(15) NOT NULL,
    mp integer NOT NULL,
    settlep double precision NOT NULL,
    prft integer NOT NULL,
    atr20 double precision NOT NULL,
    upd timestamp with time zone,
    ntrds double precision
    )
    WITH (
    OIDS=FALSE
    );
    
    
    CREATE TABLE st_daily2
    (
    CONSTRAINT st_daily2_pk PRIMARY KEY (stid, d, ticker),
    CONSTRAINT st_daily2_strgs_fk FOREIGN KEY (stid)
        REFERENCES strgs (stid) MATCH SIMPLE
        ON UPDATE CASCADE ON DELETE CASCADE,
    CONSTRAINT st_daily2_ck CHECK (stid >= 200000 AND stid < 300000)
    )
    INHERITS (st_daily)
    WITH (
    OIDS=FALSE
    );
    
  2. Данные в этой таблице являются результатами моделирования. Многопоточные движки моделирования, написанные на c #, вставляют данные в базу данных, используя Npgsql.

  3. psql также показывает пустую строку.

alt text

Ответы [ 3 ]

1 голос
/ 06 августа 2012

Ответ на вашу проблему вполне может быть в вашем первом предложении:

Я использую postgresql 9.0 beta 4.

Зачем ты это делаешь? Обновление до стабильной версии. Желательно последний выпуск текущей версии. Это 9.1.4 на сегодняшний день.

1 голос
/ 30 августа 2010

Вам лучше оставить сообщение на http://www.postgresql.org/support/submitbug

Некоторые вопросы:

  1. Не могли бы вы показать использовать таблицу определения и ограничения для partions
  2. Как вы загрузили свои данные?
  3. Вы получаете тот же результат при использовании другой инструмент, например psql ?
0 голосов
/ 06 августа 2012

Я дошел до той же точки: «Что, черт возьми, это пустое значение?»
Нет, это не NULL, это -infinity.

Чтобы фильтровать такиеиспользование строки:

WHERE 
  case when mytestcolumn = '-infinity'::timestamp or
            mytestcolumn = 'infinity'::timestamp 
  then NULL else mytestcolumn end IS NULL

вместо:

WHERE mytestcolumn IS NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...