Re: Using timestamp(tz) in C functions - Mailing list pgsql-general
From | Adrian Klaver |
---|---|
Subject | Re: Using timestamp(tz) in C functions |
Date | |
Msg-id | a756dab3-2e3d-bc8a-45d0-ea5c043eec9c@aklaver.com Whole thread Raw |
In response to | Using timestamp(tz) in C functions (Keith Fiske <keith@omniti.com>) |
Responses |
Re: Using timestamp(tz) in C functions
|
List | pgsql-general |
On 07/28/2016 02:15 PM, Keith Fiske wrote: > Working on trying to get a C version of the maintenance function for my > pg_partman extension working so I can hopefully make it more flexible > and efficient. > > https://github.com/keithf4/pg_partman/blob/master/sql/functions/run_maintenance.sql > > Up until this point I've just been using SPI and the Datum conversion > functions (DatumGetCString, DatumGetInt32) to get string and numeric > data out of tables and things have been working fine. I'm at the first > point in that function where I'll need to start dealing with timestamp data. > > https://gist.github.com/keithf4/81c32bf8b689c74b20c10ad8c91d45a3#file-pg_partman_bgw-c-L532 > > There's what I've got working so far and links directly to the area > where I'm having a problem. I found the DatumGetTimeTzADTP() function > and the TimeTzADT data type looking through the source and that seems to > be exactly what I'm looking for. However, when I get to the point of > trying to simply use the time value in that variable (line 544), > Postgres segfaults. So far I've just been trying to print the value out > to the log to ensure I'm pulling it out correctly. The "time" value of > the struct appears to be an int64, so I thought %ld would be the > correct, but even using %d or %s fails. > > You can see in my original plpgsql function how I eventually intend to > use the timestamp values. Here's a link directly to the equivalent section > > https://github.com/keithf4/pg_partman/blob/master/sql/functions/run_maintenance.sql#L139 > > So, not sure if I'm even going about this the right manner for the way I > intend to use the timestamp values. Still fairly new to C and getting > use to postgres internals. Any help, or even an example of using > timstamp data pulled from a table in C with SPI, would be great. https://www.postgresql.org/docs/current/static/contrib-spi.html F.34.5. moddatetime — Functions for Tracking Last Modification Time moddatetime() is a trigger that stores the current time into a timestamp field. This can be useful for tracking the last modification time of a particular row within a table. To use, create a BEFORE UPDATE trigger using this function. Specify a single trigger argument: the name of the column to be modified. The column must be of type timestamp or timestamp with time zone. There is an example in moddatetime.example. Can be seen here: https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=contrib/spi/moddatetime.c;h=c6d33b73557ff499faa0d475e032fd1f8164afbd;hb=HEAD > > Thanks! > > -- > Keith Fiske > Database Administrator > OmniTI Computer Consulting, Inc. > http://www.keithf4.com -- Adrian Klaver adrian.klaver@aklaver.com
pgsql-general by date: