Re: mysql_fdw trouble - Mailing list pgsql-general

From Adrian Klaver
Subject Re: mysql_fdw trouble
Date
Msg-id 56339A40.2040702@aklaver.com
Whole thread Raw
In response to Re: mysql_fdw trouble  (Dane Foster <studdugie@gmail.com>)
Responses Re: mysql_fdw trouble  (Dane Foster <studdugie@gmail.com>)
List pgsql-general
On 10/30/2015 08:13 AM, Dane Foster wrote:
>
> On Fri, Oct 30, 2015 at 10:57 AM, Adrian Klaver
> <adrian.klaver@aklaver.com <mailto:adrian.klaver@aklaver.com>> wrote:
>
>     On 10/30/2015 07:21 AM, Dane Foster wrote:
>
>
>         On Fri, Oct 30, 2015 at 9:40 AM, Adrian Klaver
>         <adrian.klaver@aklaver.com <mailto:adrian.klaver@aklaver.com>
>         <mailto:adrian.klaver@aklaver.com
>         <mailto:adrian.klaver@aklaver.com>>> wrote:
>
>              On 10/29/2015 05:38 PM, Dane Foster wrote:
>
>                  Hello,
>
>                  I think I've tripped over another mysq_fdw bug. I've
>         filed a bug
>                  report
>                  on github already but just in case the problem is w/ my
>         query I
>                  figured
>                  I would post it here in case someone sees something
>         obvious.
>
>                  The error message I get is: null value in column
>         "location" violates
>                  not-null constraint.
>
>                  The DDL is here:
>         https://github.com/EnterpriseDB/mysql_fdw/issues/71
>
>                  For the record I know top posting is a crime against
>         god and
>                  humanity
>                  but I feel justified because this post is not directly
>         related
>                  to the
>                  original. So there!  Granted it's in the same milieu;
>         and yes this
>                  current sentence exists for the sole purpose of me
>         being able to
>                  use the
>                  word milieu because the opportunity to use it is so few
>         and far
>                  between.
>
>                  ​INSERT INTO series (cid, day, title, description,
>         location,
>                  duration,
>                  can_join)
>                      SELECT
>                        cid,
>                        row_number() OVER (PARTITION BY cid ORDER BY
>         lower(duration)),
>                        title,
>                        description,
>                        location,
>                        duration,
>                        can_join
>                      FROM (
>                        SELECT
>                          cid,
>                          title,
>                          description,
>                          can_join::BOOLEAN,
>                          (SELECT label FROM _locations WHERE
>         loc=location) AS
>                  location,
>                          ('[' || starts || ', ' || (starts + INTERVAL '4
>         HOUR') ||
>                  ']')::TSZ_PERIOD AS duration
>                        FROM
>                          _series
>                      ) AS v​
>
>                  ​Regards,​
>
>
>              So what do you get when you do?:
>
>              SELECT
>                     cid,
>                     title,
>                     description,
>                     can_join::BOOLEAN,
>                     (SELECT label FROM _locations WHERE loc=location) AS
>         location,
>                     ('[' || starts || ', ' || (starts + INTERVAL '4
>         HOUR') ||
>              ']')::TSTZRANGE AS duration
>                   FROM
>                     _series
>                 );
>
>
>                  Dane
>
>
>
>
>              --
>              Adrian Klaver
>         adrian.klaver@aklaver.com <mailto:adrian.klaver@aklaver.com>
>         <mailto:adrian.klaver@aklaver.com
>         <mailto:adrian.klaver@aklaver.com>>
>
>         ​
>         I get rows of data, location and all.
>
>
>     And when you do?:
>
>     SELECT
>          cid,
>          row_number() OVER (PARTITION BY cid ORDER BY lower(duration)),
>          title,
>          description,
>          location,
>          duration,
>          can_join
>        FROM (
>          SELECT
>            cid,
>            title,
>            description,
>            can_join::BOOLEAN,
>            (SELECT label FROM _locations WHERE loc=location) AS location,
>            ('[' || starts || ', ' || (starts + INTERVAL '4 HOUR') ||
>     ']')::TSTZRANGE AS duration
>          FROM
>            _series
>        ) AS v
>
>
>
>         Dane
>         ​
>
>
>
>     --
>     Adrian Klaver
>     adrian.klaver@aklaver.com <mailto:adrian.klaver@aklaver.com>
>
>
> ​Before I answer your second query question I need to revise my response
> to the first. Yes the first query runs w/o an error message but the bit
> about "rows and all" was not entirely correct. Out of 313 rows only the
> first row had a location. The other 312 rows have NULL in the location
> column which is not supposed to happen. To verify this I changed the
> table names and removed the PostgreSQL transformations (i.e., use of ||
> and :: for casting) and ran the query against the MySQL database; it
> returned 313 rows of data, location and all.

You would think that would also cause an issue with the first row that
is returned correctly. My suspicion is with this:

row_number() OVER (PARTITION BY cid ORDER BY lower(duration))

What happens if you run the full SELECT without it?


>
> Now that I've cleared that up.
>
> Your second query also runs w/o any error messages but like the first
> only the first row has a non NULL value in the location column.
>
>
>
> Dane
> ​
>


--
Adrian Klaver
adrian.klaver@aklaver.com


pgsql-general by date:

Previous
From: Alvaro Herrera
Date:
Subject: Re: pgxs/config/missing is... missing
Next
From: Dane Foster
Date:
Subject: Re: mysql_fdw trouble