Basically, in an (maybe-over)simplified example:

CREATE OR REPLACE FUNCTION add_transaction(transaction core_transaction)
    RETURNS integer AS $$
DECLARE
    transaction2 core_transaction;
BEGIN
    transaction.field1 := 'lapse’;
    transaction2.field2 := transaction.field2;
    transaction2.field1 := 'lapse2’;
    INSERT INTO core_transaction VALUES(transaction.*);
    INSERT INTO core_transaction VALUES(transaction2.*);
    RETURN 1;
END
$$
LANGUAGE plpgsql;

So, I wanted to do the same in plpython…

CREATE OR REPLACE FUNCTION add_transaction(transaction core_transaction)
    RETURNS integer AS $$
    transaction['field1'] = ‘lapse’
    transaction2 = { ‘field1’: ‘lapse2’, ‘field2’: transaction[‘field1’] } 

    # not this but something that would work without enumericating all 
columns/fields
    pl = plpy.execute('INSERT INTO core_transaction VALUES(transaction.*)’)
    pl = plpy.execute('INSERT INTO core_transaction VALUES(transaction2.*)')
    return 1
END
$$
LANGUAGE plpythonu;



> On 02/06/2015, at 15:51, Adrian Klaver <adrian.kla...@aklaver.com> wrote:
> 
> On 06/02/2015 03:10 AM, Filipe Pina wrote:
>> HI Adrian,
>> 
>> I had a typo in the email:
>> 
>> INSERT INTO my_table VALUES(my_table.*);
>> 
>> was actually
>> 
>> INSERT INTO my_table VALUES(my_var.*);
> 
> Aah, that is different:)
> 
>> 
>> So I meant to insert the variable I had in memory (dict representing a row), 
>> not the rows from the table..
> 
> So where is the variable getting its data?
> 
> Or can we see a simple example of what you are trying to do?
> 
>> 
>>> On 02/06/2015, at 01:44, Adrian Klaver <adrian.kla...@aklaver.com> wrote:
>>> 
>>> On 06/01/2015 07:42 AM, Filipe Pina wrote:
>>>> Thanks for the reply anyway, it's a pity though, it'd be useful..
>>>> 
>>>> Another bump I've found along the pl/python road: insert ROWTYPE in table..
>>>> Maybe you have some hint on that? :)
>>>> 
>>>> So, in PLPGSQL I can:
>>>> 
>>>> DECLARE
>>>>   my_var my_table;
>>>> BEGIN
>>>>   my_var.col1 := 'asd';
>>>>   INSERT INTO my_table VALUES(my_table.*);
>>>> END;
>>>> 
>>>> How would I do something like that in pl/python?
>>>> 
>>>> First, how to declare a ROW-TYPE variable, as they're all python mappings?
>>>> 
>>>> my_var = { 'col1': 'asd' } enough? it'd would miss all the other columns...
>>>> 
>>>> Second, how to insert it?
>>>> 
>>>> plpy.prepare and .execute say they don't support composite types, so I
>>>> cannot simply pass
>>>> 
>>>> pl = plpy.prepare('INSERT INTO core_customer VALUES ($1)', ['my_table'])
>>>> 
>>>> Any workarounds for this? (meaning I wouldn't have to specify any
>>>> columns in the insert statement)
>>> 
>>> http://www.postgresql.org/docs/9.4/interactive/sql-insert.html
>>> 
>>> pl = plpy.prepare('INSERT INTO core_table SELECT * FROM my_table')
>>> 
>>>> 
>>>> Thanks
>>>> 
>>>> On Sex, Mai 29, 2015 at 2:00 , Peter Eisentraut <pete...@gmx.net> wrote:
>>>>> On 5/18/15 10:52 AM, Filipe Pina wrote:
>>>>> 
>>>>>    But one of the functions I need to create needs to accept an array
>>>>>    of records.
>>>>> 
>>>>> PL/Python doesn't support that. Some more code needs to be written to
>>>>> support that. You did everything correctly. I don't know of a good
>>>>> workaround.
>>> 
>>> 
>>> --
>>> Adrian Klaver
>>> adrian.kla...@aklaver.com
>> 
>> 
> 
> 
> -- 
> Adrian Klaver
> adrian.kla...@aklaver.com <mailto:adrian.kla...@aklaver.com>

Reply via email to