SPI_execute

Name

SPI_execute -- ִ��һ������

Synopsis

int SPI_execute(const char * command, bool read_only, int count)

����

SPI_exec ִ�������� SQL �����ȡ count �С� ��� read_only Ϊ�棬���������ֻ���ģ���˿�����΢����һЩִ�еĿ�����

�������ֻ���������ӵĹ����е��á�

��� count ���㣬���������ʺϵ���������ִ�С� ��� count ���� 0����ô����ִ�е������������ƣ�����һ�� LIMIT �Ӿ䣩�� ���磬

SPI_execute("INSERT INTO foo SELECT * FROM bar", false, 5);

��ֻ������� 5 �в�����С�

�������һ���ִ��ﴫ�ݶ����� SPI_execute �������ִ�е�����Ľ���� count �����ƶ�����Ӧ����ÿһ����� ���Dz���Ӧ���ڹ������ɵ��������

��� read_only �� false�� SPI_execute �������������������ִ���ִ����ÿ������֮ǰ����һ���µ�"����"�� �����ǰ����ĸ��뼶����SERIALIZABLE���������ʵ���ϲ����ı䣬 ������ READ COMMITTED ģʽ�������ո�������ÿ������������Ự�������ύ�Ľ���� ����ʵ������Ϊ���޸����ݿ��������һ�µ���Ϊ��

��� read_only �� true�� SPI_execute �������¿��ջ��������������������ָ����򵥵� SELECT ��������������ִ���������ʹ��Ϊ��Χ�IJ�ѯ���������Ŀ���ִ�С� ���ִ��ģʽ�ȶ�/дģʽִ�е���΢��Щ����Ϊ��������ÿ�������һЩ������ ���������������������ȶ�����������Ϊ����ִ�ж���ʹ��ͬһ�����գ� ����ﲻ���иı䡣

ͨ������ͬһ��ʹ�� SPI �ĺ��������ֻ���Ͷ�д�����Dz����ǵģ� �������ܵ��·dz����ҵ���Ϊ����Ϊֻ���IJ�ѯ���ܿ����κζ�д�IJ�ѯ�������ݿ���¡�

�����һ������ִ�з��صĽ����ʵ�����������ȫ�ֵı��� SPI_processed �� �����Ǻ������ص�ֵ�� SPI_OK_UTILITY������������ķ���ֵ�� SPI_OK_SELECT�� ��ô�����ʹ��ȫ��ָ�� SPITupleTable *SPI_tuptable ���ʽ���С�

�ṹ SPITupleTable ����������ģ�

typedef struct
{
    MemoryContext tuptabcxt;    /* �������ڴ滷�� */
    uint32      alloced;        /* ����� vals ����Ŀ */
    uint32      free;           /* ���е� vals ��Ŀ */
    TupleDesc   tupdesc;        /* �������� */
    HeapTuple  *vals;           /* ������ */
} SPITupleTable;

vals ��һ��ָ�������еĵ�ָ�����顣 ����Ч��¼����Ŀ�� SPI_processed �������� tupdesc ��һ����������������Դ��ݸ� SPI ����������Щ�����С� tuptabcxt��alloced���� free �� SPI ���ڲ��ֶΣ����Ǹ� SPI ������ʹ�õġ�

SPI_finish �ͷ������ڵ�ǰ�����з���� SPITupleTables�� ������Ѿ��������ض��Ľ������ô���Ը�����ͷ����������ǵ��� SPI_freetuptable��

����

const char * command

����Ҫִ�е�������ִ�

bool read_only

true ����ֻ����ִ��

int count

����򷵻ص��������

����ֵ

�������ִ�гɹ�����ô��������ֵ֮һ���Ǹ�������

SPI_OK_SELECT

���ִ����һ�� SELECT�������� SELECT INTO��

SPI_OK_SELINTO

���ִ����һ�� SELECT INTO��

SPI_OK_DELETE

���ִ����һ�� DELETE��

SPI_OK_INSERT

���ִ����һ�� INSERT��

SPI_OK_UPDATE

���ִ����һ�� UPDATE��

SPI_OK_UTILITY

���ִ����һ�����������㣨���磬CREATE TABLE��

��������ʱ���������и���ֵ֮һ��

SPI_ERROR_ARGUMENT

��� command �� NULL ���� count �� 0

SPI_ERROR_COPY

�����ͼ���� COPY TO stdout ���� COPY FROM stdin

SPI_ERROR_CURSOR

�����ͼ���� DECLARE��CLOSE������ FETCH

SPI_ERROR_TRANSACTION

�����ͼ���� BEGIN��COMMIT������ ROLLBACK

SPI_ERROR_OPUNKNOWN

��������δ֪����Ӧ�÷�����

SPI_ERROR_UNCONNECTED

�����һ��δ���ӵĹ����е���

ע��

���� SPI_execute��SPI_exec��SPI_execute_plan�� SPI_execp�� �� SPI_prepare �޸� SPI_processed �� SPI_tuptable ��ֻ��һ��ָ�룬���ǽṹ�����ݣ����������Ҫ��Խ����ĵ��÷��� SPI_execute ������غ����Ľ������ô��Ҫ��������ȫ�������浽һ���ֲ����̱����С�