Re: Using row_to_json with %ROWTYPE ? - Mailing list pgsql-general

From Tim Smith
Subject Re: Using row_to_json with %ROWTYPE ?
Date
Msg-id CA+HuS5EwP3nqFR0qEO85dxuN3Mj6JzBL2mY549eSqgH71sgUkQ@mail.gmail.com
Whole thread Raw
In response to Re: Using row_to_json with %ROWTYPE ?  (David Johnston <david.g.johnston@gmail.com>)
Responses Re: Using row_to_json with %ROWTYPE ?
List pgsql-general
> PostgreSQL doesn't lie

Well if its not lying its one big stinking bug !

How about you tell me where you see these duplicate columns in my view
that PostgreSQL is apparently not lying to me about  ....

       View "public.app_val_session_vw"
      Column       |     Type      | Modifiers
-------------------+---------------+-----------
session_id         | bigint |
session_ip         | inet          |
session_user_agent | character(40) |
session_start      | bigint        |
session_lastactive | bigint        |
user_id            | bigint |
tenant_id          | bigint |
reseller_id        | bigint |
tenant_name        | text          |
user_fname         | text          |
user_lname         | text          |
user_email         | text          |
user_phone         | bigint        |
user_seed          | character(16) |
user_passwd        | character(60) |
user_lastupdate    | bigint        |
tenant_lastupdate  | bigint        |

On 5 February 2015 at 23:19, David Johnston <david.g.johnston@gmail.com> wrote:
> On Thu, Feb 5, 2015 at 4:01 PM, Tim Smith <randomdev4+postgres@gmail.com>
> wrote:
>>
>>  > returning more than one row? v_row can only hold one row at a time.
>>
>> Absolutley not.  (a) My where clause is a primary key (b) I have
>> checked it manually, it only returns one row
>>
>> >You really need to provide error messages
>>
>> Yes, well PostgreSQL is being incredibly unhelpful in that respect, it
>> says "(SQLSTATE: 42702  - SQLERRM: column reference "session_id" is
>> ambiguous)" ... but that is an utter lie.   There is only one column
>> called session_id in my view (in both the view output and the
>> underlying view query, there is only one reference to "session_id")
>>
> PostgreSQL doesn't lie - it just doesn't always give all of the information
> you need
> to understand what it is seeing.
>
> You have a view definition problem since nowhere in the code you provide
> should
> session_id be resolved.
>
> A simple:
>
> SELECT * FROM my_view;
>
> would prove out that theory.
>
> If that works then most probably the my_view view that the function sees is
> different
> than the one that you think it is seeing.
>
>>
>> On 5 February 2015 at 21:57, Adrian Klaver <adrian.klaver@aklaver.com>
>> wrote:
>> > On 02/05/2015 01:38 PM, Tim Smith wrote:
>> >>
>> >> Hi,
>> >>
>> >> I have a function that broadly looks like this :
>> >>
>> >> create function doStuff() returns json as $$
>> >> DECLARE
>> >> v_row my_view%ROWTYPE;
>> >> BEGIN
>> >> select * into strict v_row from my_view where foo=bar;
>> >> select row_to_json(v_row) from v_row;
>>
>
> A third problem you will hit, when you fix the syntax, is that the
> SELECT row_to_json(...) command has no target and thus needs
> to use PERFORM, not SELECT.
> David J.
>


pgsql-general by date:

Previous
From: David Johnston
Date:
Subject: Re: Using row_to_json with %ROWTYPE ?
Next
From: Tim Smith
Date:
Subject: Re: Using row_to_json with %ROWTYPE ?