1

我做了一个简单的测试Vertica

ha=> insert into test(Name, City) values( 'Nan', 'Nanjing');
 OUTPUT 
--------
      1
(1 row)

ha=> select node_name, wos_row_count, ros_row_count from projection_storage where anchor_table_name = 'test';
   node_name   | wos_row_count | ros_row_count 
---------------+---------------+---------------
 v_ha_node0001 |             1 |             3
(1 row)

ha=> select * from test;
   ID   | Name |  City   
--------+------+---------
 250001 | Nan  | Nanjing
 250002 | Nan  | Nanjing
 250003 | Nan  | Nanjing
 250004 | Nan  | Nanjing
(4 rows)

select操作显示OK(里面的数据WOS全部显示ROS)。

然后我写了一个简单的程序,它使用ODBC

ret = SQLExecDirect(stmt_handle, (SQLCHAR*)"select * from test", SQL_NTS);
if (!SQL_SUCCEEDED(ret))
{
    printf("Execute statement failed\n");
    goto ERR;
}

while ((ret = SQLFetch(stmt_handle)) == SQL_SUCCESS)
{
    row_num++;
}

printf("Row number is %d\n", row_num);

但结果是:

Row number is 3

它不计算WOS.

并且DbVisualizer还显示 3 行数据:
VXTML

它是否需要一些特殊的选项来使用ODBC?首先十分感谢!

4

1 回答 1

2

默认情况下,vsql 处于事务模式。只要您vsql 中保持会话打开,您就会看到您所期望的,就像您在事务中一样。

一旦您离开会话(odbc、dbvis),该事务(尚)不可见。要使其对其他会话可见,您需要发出“COMMIT;” 在vsql里面。然后(确认)您可以从 odbc 和 dbvis 访问数据。

您可以将(仅限 vsql)您的事务设置为自动提交

\set AUTOCOMMIT on
-- disable with
\set AUTOCOMMIT off

要知道是否启用了自动提交,您可以使用show

show AUTOCOMMIT;
    name    | setting
------------+---------
 autocommit | off
(1 row)

你甚至可以在你的vsql调用中使用--set autocommit=on. 这是一个好主意还是不是另一个问题。

ODBC 允许您以不同的方式设置自动提交,请参阅odbc 文档

于 2014-11-27T09:56:12.127 回答