I’ve been running ads on my websites since early 1999, so nearly 10 years. It was roughly May 2002 that I started using phpPgAds. This was the PostgreSQL version of phpAdsNew. This project became OpenAds and is now known as OpenX.
Recently I decided to upgrade to the latest version of OpenX. There was a upgrade path from Openads-PgSQL-2.0.11-pr1, the latest releast of OpenAds to use PostgreSQL, to OpenX 2.6.
The first problem I encountered was related to timezones. The fix was easy, but difficult to obtain. It look like this, and affected lib/OA/Upgrade/Login.php in two places.
- $oDbh->exec("SET TIMEZONE TO 'UTC'");
+ $oDbh->exec("SET TIMEZONE TO 'GMT'");
The problem: UTC is not a valid PostgreSQL timezone. GMT is.
I posted full details in the OpenX forum.
Later, I started seeing this error in my logs:
ERROR: invalid input syntax for type timestamp: "%8-%m-%5 %H:00:00"
STATEMENT:
INSERT INTO
tmp_ad_impression
(
date_time,
operation_interval,
operation_interval_id,
interval_start,
interval_end,
ad_id,
creative_id,
zone_id,
impressions
)
SELECT
DATE_FORMAT(drad.date_time, '%Y-%m-%d %H:00:00')::timestamp AS day_and_hour,
60 AS operation_interval,
98 AS operation_interval_id,
'2008-10-23 02:00:00'::timestamp AS interval_start,
'2008-10-23 02:59:59'::timestamp AS interval_end,
drad.ad_id AS ad_id,
drad.creative_id AS creative_id,
drad.zone_id AS zone_id,
COUNT(*) AS impressions
FROM
"phpads_data_raw_ad_impression" AS drad
WHERE
drad.date_time >= '2008-10-23 02:00:00'
AND
drad.date_time < = '2008-10-23 02:59:59'
GROUP BY
day_and_hour, drad.ad_id, drad.creative_id, drad.zone_id
I got onto the OpenX IRC channel and started asking questions. Eventually, Matteo Beccati came to my rescue. Matteo and I go way back. I was one of the first users of the PostgreSQL version of this product. I chose it *because* it worked with PostgreSQL. I was not interested in the MySQL version.
We found the cause of the problem quickly enough:
\df date_format Schema | Name | Result data type | Argument data types --------+-------------+------------------+----------------------------------- public | date_format | text | timestamp with time zone, text public | date_format | text | timestamp without time zone, text
The solution:
drop function date_format(timestamp, text)
My database had been upgraded and upgraded over the years. So this functions lingered. He suggested I look at https://svn.openx.org/openx/trunk/etc/core.pgsql.php and compare it to what I had. Most of their testing had been upgrades a fresh 2.0.11 install.
Searching through the database, function by function, I found the following issues:
openx=# \df HOUR
List of functions
Schema | Name | Result data type | Argument data types
--------+------+------------------+-----------------------------
public | hour | integer | timestamp with time zone
public | hour | smallint | timestamp without time zone
(2 rows)
openx=# drop function hour(timestamp without time zone);
DROP FUNCTION
openx=# \df TO_DAYS
List of functions
Schema | Name | Result data type | Argument data types
--------+---------+------------------+-----------------------------
public | to_days | bigint | timestamp without time zone
public | to_days | integer | timestamp with time zone
(2 rows)
openx=# drop function to_days(timestamp without time zone);
DROP FUNCTION
openx=# \df UNIX_TIMESTAMP
List of functions
Schema | Name | Result data type | Argument data types
--------+----------------+------------------+-----------------------------
public | unix_timestamp | bigint | timestamp without time zone
public | unix_timestamp | integer | timestamp with time zone
(2 rows)
openx=# drop function unix_timestamp(timestamp without time zone);
DROP FUNCTION
Hopefully that will fix any hidden problems.
I’m still not running this in production yet. I’m waiting for OpenX 2.6.2 to hit the FreeBSD ports tree.












Things I’ll want to do before I move this to production:
– update freebsddiary.org
– update freshports and freshsource
– update the Phorum code for ads
– update Burst
– update AdSense
– update adsl and broadband archives