У меня есть PHP-скрипт с несколькими похожими таблицами SQL (меняется только 1 столбец):
define('SQL_TABLES', '
create table hide_id (
ID varchar(20) references quincytrack,
USERNAME varchar(20) not null,
UPDATED timestamp default current_timestamp
);
create table hide_name (
NAME varchar(20) not null,
USERNAME varchar(20) not null,
UPDATED timestamp default current_timestamp
);
create table hide_category (
CATEGORY varchar(120) not null,
USERNAME varchar(20) not null,
UPDATED timestamp default current_timestamp
);
create table hide_appsversion (
APPSVERSION varchar(30) not null,
USERNAME varchar(20) not null,
UPDATED timestamp default current_timestamp
);
create table hide_osversion (
OSVERSION varchar(30) not null,
USERNAME varchar(20) not null,
UPDATED timestamp default current_timestamp
);
И я хотел бы создать процедуру upsert для каждой из них:
define('SQL_PROCS', '
create or replace function hide_id_upsert(
_ID varchar,
_USERNAME varchar
) returns void as $BODY$
begin
update hide_id set
ID = _ID,
USERNAME = _USERNAME,
UPDATED = current_timestamp
where ID = _ID;
if not found then
insert into hide_id (
ID,
USERNAME
) values (
_ID,
_USERNAME
);
end if;
end;
$BODY$ language plpgsql;
');
Интересно, смогу ли я сделать это в пакете средствами PgPlSQL или PHP?Что-то вроде:
$columns = array('ID', 'NAME', 'CATEGORY', 'APPSVERSION', 'OSVERSION');
foreach ($columns as $key) {
$sth = $pg->prepare(sprintf(SQL_PROCS_TEMPLATE, $key, $key, ...);
$sth->execute();
}
, но без вышеуказанного уродства необходимости указывать $ key много раз.
Использование PostgreSQL 8.4.5 и PHP 5.1.6 под CentOS5.5 Linux
Спасибо!Alex