我对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行数据:
使用ODBC
是否需要一些特殊选项?非常感谢提前!
答案 0 :(得分:2)
默认情况下,vsql处于事务模式。只要你打开会话,在 vsql中,你就会看到你所期望的,就像你在交易中一样。
只要您的会话
您可以使用
将您的交易(仅限vsql)设置为autocommit\set AUTOCOMMIT on
-- disable with
\set AUTOCOMMIT off
要知道是否启用了自动提交,您可以使用show:
show AUTOCOMMIT;
name | setting
------------+---------
autocommit | off
(1 row)
您甚至可以使用--set autocommit=on
在vsql来电时进行此操作。这是一个好主意还是不是另一个问题。
ODBC允许您以不同方式设置自动提交,请参阅odbc doc。