Re: How to add xml data to table - Mailing list pgsql-general

From Andrus
Subject Re: How to add xml data to table
Date
Msg-id ACD0F7917BE048E18C1C4ABD2562F3AA@dell2
Whole thread Raw
In response to Re: How to add xml data to table  ("Francisco Figueiredo Jr." <francisco@npgsql.org>)
List pgsql-general
There was dblink contrib module which reads data from other PostgreSql
database using tcp/ip connection.
Maybe there is similar for http/asmx data retrieval ?

About periodic call of stored procedure, is there cron contrib for PosgreSql
? Or can we force some code call on autofacuum or after
every server request like poor man crontab in drupal/php? This code can
check and call refresh on evry hour.

Can we add some trigger code for some frequently used table or view to
implement poor man crontab ?

Can some serve sider langeage used for those ?
Is server side C#/.NET,Mono already implemented ?

Andrus.



-----Algsõnum-----
From: Francisco Figueiredo Jr.
Sent: Saturday, October 08, 2011 11:26 PM
To: Andrus
Cc: pgsql-general@postgresql.org
Subject: Re: [GENERAL] How to add xml data to table

I think this approach is much better as you can solve everything on
server itself.

About your question on http request I don't know.
Sorry for that. :(
Maybe there is a module for Postgresql which can enable you to make http
calls?



On Sat, Oct 8, 2011 at 17:15, Andrus <kobruleht2@hot.ee> wrote:
> Thank you.
> I got also the following code:
>
> First import the XML into a staging table:
>
> CREATE TABLE xml_import
> (
>  xml_data  xml
> )
>
> with product_list as (
>  select
>
unnest(xpath('/soap12:Envelope/soap12:Body/pl:GetProductListResponse/pl:GetProductListResult/pl:ProductList/pl:Product',
> xml_data,
>         ARRAY[ array['xsd', 'http://www.w3.org/2001/XMLSchema-instance'],
>                array['soap12', 'http://www.w3.org/2003/05/soapenvelope'],
>                array['pl', 'http://xxx.yy.zz/']])) as product
>  from xml_import
> )
> select (xpath('/Product/SupplierCode/text()', product)::varchar[])[1] as
> suppliercode,
>      (xpath('/Product/SegmentId/text()', product)::varchar[])[1] as
> segmentid,
>      (xpath('/Product/PartNumber/text()', product)::varchar[])[1] as
> partnumber,
>      to_number((xpath('/Product/Price/text()', product)::varchar[])[1],
> '99999.99999') as price,
>      to_number((xpath('/Product/GrossWeight/text()',
> product)::varchar[])[1], '9999.9999') as weight
> from product_list
>
> Looks simpler than using XmlReader, isn't it?
> How to invoke asmx web service call (= http POST request) from
> PostgreSql server  which reads http response to xml_import  table ?
>
> How to call stored procedure periodically after every one hour in server?
>
> In this case we can create stored procedure, client side code is not
> nessecary at
> all.
>
> Andrus.
>
> -----Algsõnum----- From: Francisco Figueiredo Jr.
> Sent: Saturday, October 08, 2011 9:38 PM
> To: Andrus Moor
> Cc: pgsql-general@postgresql.org
> Subject: Re: [GENERAL] How to add xml data to table
>
> I think your best bet would be to go with XmlReader as it provides a
> fast read only parsing of the document.
>
> From MS doc about linq to xml:
> http://msdn.microsoft.com/en-us/library/bb387048.aspx
>
> "XmlReader is a fast, forward-only, non-caching parser.
>
> LINQ to XML is implemented on top of XmlReader, and they are tightly
> integrated. However, you can also use XmlReader by itself.
>
> For example, suppose you are building a Web service that will parse
> hundreds of XML documents per second, and the documents have the same
> structure, meaning that you only have to write one implementation of
> the code to parse the XML. In this case, you would probably want to
> use XmlReader by itself.
>
> In contrast, if you are building a system that parses many smaller XML
> documents, and each one is different, you would want to take advantage
> of the productivity improvements that LINQ to XML provides."
>
>
> I think your case fits the first example.
>
> This way you could use xmlreader to extract the values and then fill
> NpgsqlParameter values and execute the insert command.
>
> I hope it helps.
>
>
>
> 2011/10/7 Andrus Moor <eetasoft@online.ee>:
>>
>> soap response below contains table of products, approx 5000 rows.
>> Table of products (below) is nearly similar structure as xml data.
>>
>> Products table needs to be updated from xml data in every hour.
>>
>> How to add this xml data to table of products ?
>>
>> Should I use xpath() function or any other ides ?
>> Using npgsql and C# in ASP .NET / Mono.
>>
>> Andrus.
>>
>>
>> CREATE TABLE products (
>> SupplierCode char(20) primary key,
>> SegmentId char(8),
>> GroupId char(8),
>> ClassId char(8),
>> SeriesId char(8),
>> VendorId char(2),
>> PartNumbrt char(27),
>> Name Text,
>> Warranty Numeric(6,2),
>> Price Numeric(10,4),
>> Quantity Numeric(8,2)
>> )
>>
>> Data which is required to add looks like:
>>
>> <?xml version="1.0" encoding="utf-8"?>
>> <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>> xmlns:soap12="http://www.w3.org/2003/05/soapenvelope">
>> <soap12:Body>
>> <GetProductListResponse xmlns="http://xxx.yy.zz/">
>> <GetProductListResult>
>> <ProductList>
>> <Product>
>> <SupplierCode>001982</SupplierCode>
>> <SegmentId>65000000</SegmentId>
>> <GroupId>65010000</GroupId>
>> <ClassId>65010200</ClassId>
>> <SeriesId>10001125</SeriesId>
>> <VendorId>AM</VendorId>
>> <PartNumber>ADA3000BIBOX</PartNumber>
>> <Name>AMD Athlon64 3000+ (1800MHz/L2 Cache 512KB) Socket 939, BOX</Name>
>> <Warranty>36</Warranty>
>> <Price>196.00000</Price>
>> <Quantity>0</Quantity>
>> <DateExpected>1999-01-01T00:00:00</DateExpected>
>> <IsNewProduct>true</IsNewProduct>
>> </Product>
>> <Product>
>> <SupplierCode>001512</SupplierCode>
>> <SegmentId>65000000</SegmentId>
>> <GroupId>65010000</GroupId>
>> <ClassId>65010200</ClassId>
>> <SeriesId>10001125</SeriesId>
>> <VendorId>AM</VendorId>
>> Acme API Specification v 1.0
>> 13
>> <PartNumber>ADA3000AXBOX</PartNumber>
>> <Name>AMD Athlon64 3000+ (2000MHz/1600MHz/L2 Cache 512KB) Socket 754,
>> BOX</Name>
>> <Warranty>36</Warranty>
>> <Price>296.00000</Price>
>> <Quantity>0</Quantity>
>> <GrossWeight>3.6000</GrossWeight>
>> <DateExpected>1999-01-01T00:00:00</DateExpected>
>> <IsNewProduct>false</IsNewProduct>
>> </Product>
>> </ProductList>
>> </GetProductListResult>
>> </GetProductListResponse>
>> </soap12:Body>
>> </soap12:Envelope>
>
>
>
> --
> Regards,
>
> Francisco Figueiredo Jr.
> Npgsql Lead Developer
> http://www.npgsql.org
> http://gplus.to/franciscojunior
> http://fxjr.blogspot.com
> http://twitter.com/franciscojunior
>



--
Regards,

Francisco Figueiredo Jr.
Npgsql Lead Developer
http://www.npgsql.org
http://gplus.to/franciscojunior
http://fxjr.blogspot.com
http://twitter.com/franciscojunior


pgsql-general by date:

Previous
From: Pavel Stehule
Date:
Subject: Re: [9.2devel] why it doesn't do index scan only?
Next
From: skmanji
Date:
Subject: Re: How to restore a SQL-ASCII encoded database to a new UTF-8 db?