PostgreSQL 9.1.5ʸ�� | ||||
---|---|---|---|---|
前のページ | 巻戻し | 第 42章PL/Python - Python��³������ | 早送り | 次のページ |
PL/Python����⥸�塼��ϼ�ưŪ��plpy�Ȥ���Python�⥸�塼���ݡ��Ȥ��ޤ��� ���Υ⥸�塼��δؿ�������ϡ�plpy.foo�Τ褦�˺�������Python�����ɤ�����Ѥ��뤳�Ȥ��Ǥ��ޤ���
plpy�⥸�塼���execute
�����prepare
�Ȥ���2�Ĥδؿ����Ѱդ��Ƥ��ޤ���
plpy.execute
���䤤��碌ʸ����Ӿ�ά��ǽ�����°������դ��ƸƤӽФ��ȡ��䤤��碌���¹Ԥ��졢��̥��֥������ȤȤ����䤤��碌��̤��֤�ޤ���
��̥��֥������Ȥϥꥹ�Ȥ⤷���ϼ��֥������Ȥߥ�졼�Ȥ��ޤ���
��̥��֥������Ȥϡ����ֹ����̾�ˤ�äƥ����������뤳�Ȥ��Ǥ��ޤ���
��̥��֥������Ȥˤϡ��䤤��碌��̤ιԿ����֤�nrows()
��SPI_execute
���֤��ͤ��֤�status
�Ȥ�����åɤ��ɲä���Ƥ��ޤ���
��̥��֥������Ȥϡ��ѹ����뤳�Ȥ��Ǥ��ޤ���
�ʲ�������ޤ���
rv = plpy.execute("SELECT * FROM my_table", 5)
����ϡ�my_table����5�ԤޤǤ��֤��ޤ��� my_table��my_column��¸�ߤ����硢������ˤϰʲ��Τ褦�˥��������Ǥ��ޤ���
foo = rv[i]["my_column"]
2���ܤδؿ�plpy.prepare
�ϡ��䤤��碌�μ¹Էײ��������ޤ���
�䤤��碌��˥ѥ������Ȥ������硢�䤤��碌ʸ����Ӱ������Υꥹ�ȤȤȤ�˸ƤӽФ���ޤ���
�㤨�С��ʲ��Τ褦�ˤ��ޤ���
plan = plpy.prepare("SELECT last_name FROM my_users WHERE first_name = $1", [ "text" ])
text�ϡ�$1�Ȥ����Ϥ�����ѿ��η��Ǥ���
ʸ����������塢�����¹Ԥ��뤿��˴ؿ�plpy.execute
����Ѥ��ޤ���
rv = plpy.execute(plan, [ "name" ], 5)
3���ܤΰ��������°����Ǥ��ꡢ��ά��ǽ�Ǥ���
�䤤��碌�ѥ�������ӷ�̹ԤΥե�����ɤ�項42.3�Ǽ������̤ꡢPostgreSQL��Python�Υǡ������δ֤��Ѵ�����ޤ��� ����ʣ�緿�����ݡ��Ȥ���Ƥ��ʤ��Ȥ����㳰������ޤ��� ʣ�緿���䤤��碌�ѥ����Ȥ��Ƥϵ��䤵�졢�䤤��碌�η�̤�¸�ߤ������ʸ������Ѵ�����ޤ��� ��Ԥ�����β�����ˡ�Ȥ��ơ���̹ԤΥե�����ɤȤ��ƤǤϤʤ���̹ԤȤ���ʣ�緿��¸�ߤ���褦���䤤��碌������뤳�Ȥ��Ǥ����礬����ޤ��� ¾�ˡ���̤Ȥ���������ʸ�������ȤDz��Ϥ���ʬΥ���뤳�Ȥ�Ǥ��ޤ�����������ˡ�ϻ���˺�������Ƥ��ޤ��ޤ��Τǿ侩����ޤ���
PL/Python�⥸�塼�����Ѥ��ƽ��������ײ�ϼ�ưŪ����¸����ޤ��� ���줬�����̣����Τ��ˤĤ��Ƥ�SPI��ʸ���第43章�ˤȤ��Ƥ��������� �����ʣ���ƤӽФ��ˤ����Ƹ���Ū�˻��Ѥ��뤿��ˤϡ���³Ū�ʳ�Ǽ�Ѽ���Ǥ���SD�ޤ���GD��項42.4�ȡˤΤ����줫����Ѥ���ɬ�פ�����ޤ��� �㤨�С��ʲ��Τ褦�ˤ��ޤ���
CREATE FUNCTION usesavedplan() RETURNS trigger AS $$ if SD.has_key("plan"): plan = SD["plan"] else: plan = plpy.prepare("SELECT 1") SD["plan"] = plan # rest of function $$ LANGUAGE plpythonu;
�ǡ����١����˥�����������ؿ��ϥ��顼�������������顼���ؿ��ܡ��Ȥ����㳰��ȯ�������븶���Ȥʤ�ޤ���
plpy.execute
�����plpy.prepare
�ϡ��ǥե���ȤǤϴؿ���λ������plpy.SPIError�Υ��֥��饹�Υ�����ȯ�������뤳�Ȥ��Ǥ��ޤ���
���Υ��顼�ϡ�try/except��ʸ����Ѥ��ơ�Python��¾���㳰��Ʊ�ͤ˽����Ǥ��ޤ���
����ޤ���
CREATE FUNCTION try_adding_joe() RETURNS text AS $$ try: plpy.execute("INSERT INTO users(username) VALUES ('joe')") except plpy.SPIError: "���ޤ������ʤ��ä�" ���֤� else: "Joe���ɲä��줿" ���֤� $$ LANGUAGE plpythonu;
ȯ��������㳰�μ¥��饹�ϥ��顼�����������������ξ����б����ޤ��� 表A-1�ˤ���������Υꥹ�Ȥ�����ޤ��Τǻ��Ȥ��Ƥ��������� plpy.spiexceptions�⥸�塼���PostgreSQL�ξ�綠�줾����Ф��ơ����ξ��̾�˰����̾�����㳰���饹��������Ƥ��ޤ��� �㤨��division_by_zero��DivisionByZero��unique_violation��UniqueViolation�ˡ�fdw_error��FdwError�ʤɤΤ褦�ˤʤ�ޤ��� �������㳰���饹�Ϥ��줾��SPIError��Ѿ�������ΤǤ��� ���Τ褦��ʬΥ���뤳�Ȥ�����Υ��顼�����ñ�˰������Ȥ��Ǥ���褦�ˤʤ�ޤ��� �ʲ�������ޤ���
CREATE FUNCTION insert_fraction(numerator int, denominator int) RETURNS text AS $$ from plpy import spiexceptions try: plan = plpy.prepare("INSERT INTO fractions (frac) VALUES ($1 / $2)", ["int", "int"]) plpy.execute(plan, [numerator, denominator]) except spiexceptions.DivisionByZero: return "denominator cannot equal zero" except spiexceptions.UniqueViolation: return "already have that fraction" except plpy.SPIError, e: return "other error, SQLSTATE %s" % e.sqlstate else: return "fraction inserted" $$ LANGUAGE plpythonu;
plpy.spiexceptions�⥸�塼�뤫������Ƥ��㳰��SPIError��Ѿ����뤿�ᡢ�㳰���������except������ƤΥǡ����١��������������顼����ª���뤳�Ȥ����դ��Ƥ���������
�ۤʤä����顼�����������������ˡ�Ȥ��ơ�SPIError�㳰����ª���ơ��㳰���֥������Ȥ�sqlstate°����Ĵ�٤뤳�Ȥˤ�ꡢexcept�֥��å����������٤ʥ��顼�������Ǥ��ޤ��� ����°����"SQLSTATE"���顼�����ɤ�ޤ�ʸ�����ͤǤ��� ������ˡ�ϡ��ۤ�Ʊ����ǽ�����ޤ���