查询之间的列数或其类型不同

Number of columns or their types differ between the queries

在 Debian Jessie 64 上使用 PostgreSQL 9.4.3。

question.sql :

\set client_min_messages = debug

BEGIN;

SELECT * from no_plan();

SELECT Dugong.Users_Add('Sarit','thisispassword','programmer');
SELECT is(Dugong.Users_isExist('Sarit'),'t', 'Test Question_isExist() should return true' );
PREPARE A AS SELECT Username, Password, Privilege FROM Dugong.Users;

SELECT results_eq('A',$$VALUES ('sarit','thisispassword','programmer') $$,'Test wtf');
SELECT results_eq('A',$$VALUES ('Sarit','thisispassword','programmer') $$,'Test wtf');

SELECT * FROM finish();
ROLLBACK;

输出:

postgres@jaikra:/home/sarit/4alls/anemonesfish/pgtap$ pg_prove -v -d skorplusdb question.sql
question.sql .. 
Sarit
ok 1 - Test Question_isExist() should return true
not ok 2 - Test wtf
# Failed test 2: "Test wtf"
#     Number of columns or their types differ between the queries:
#         have: (Sarit,thisispassword,programmer)
#         want: (sarit,thisispassword,programmer)
not ok 3 - Test wtf
# Failed test 3: "Test wtf"
#     Number of columns or their types differ between the queries
1..3
# Looks like you failed 2 tests of 3
Failed 2/3 subtests 

Test Summary Report
-------------------
question.sql (Wstat: 0 Tests: 3 Failed: 2)
  Failed tests:  2-3
Files=1, Tests=3,  0 wallclock secs ( 0.02 usr  0.00 sys +  0.03 cusr  0.00 csys =  0.05 CPU)
Result: FAIL

Table:

CREATE TABLE Dugong.Users
( Username  varchar(255),   
    Password varchar(255) NOT NULL,
    Privilege varchar(255),
    FirstName       varchar(255),       
    MiddleName  varchar(255),
    LastName        varchar(255),
    StreetAddr  varchar(255),
    Subdistrict varchar(255),
    District        varchar(255),
    Province        varchar(255),
    Country         varchar(255),
    Zipcode         varchar(255),
    Email               varchar(255),
    PhoneCountryCode    varchar(10),
    PhoneAreaCode   varchar(255),
    PhoneNum        varchar(255),
    FaxCountryCode  varchar(255),
    FaxAreaCode varchar(255),
    FaxNum          varchar(255),
    LastModified timestamp with time zone default current_timestamp,
    PRIMARY KEY(UserName)
);

更新

目标:测试我的Users_Add功能。它是否包含我给出的所有值。
预期:Table 用户有 1 条记录和 3 个值。
我的尝试:
第二次错误。它显示了 3 列。这是一个很好的回应。因为我故意弄错了。所以在不久的将来我会让它成为一个正确的。
但是,第三个错误很奇怪。我将第 2 个大小写复制并更改为我想要的,让它在 'S' 上变为大写。然后准备好的查询有 3 列,我检查 3 个值。
我有另一个重载函数,它插入所有 20 列。现在我只想要 3。得到错误后我返回文档。

参考文档错误,它说查询和值的列数不同。但我不是这样。

问题: 我的查询有 3 列,我让 pgtap 只检查 3 列,但第 3 种情况提出我让它检查记录的不相等列大小。

有关我的安装的任何信息请询问。我会尽快给你的。

可能列数不是问题,而是它们的类型。试试这个:

SELECT results_eq('A',
    $$VALUES (
        'sarit'::varchar(255),
        'thisispassword'::varchar(255),
        'programmer'::varchar(255)) $$,
    'Test wtf');
SELECT results_eq('A',
    $$VALUES (
        'Sarit'::varchar(255),
        'thisispassword'::varchar(255),
        'programmer'::varchar(255)) $$,
    'Test wtf');

问题源于字符串(如'sarit')的默认类型是text。通常,与 text 相比,使用 varchar(n) 相当不方便。

可在此处找到有关此主题的更多信息:Any downsides of using data type "text" for storing strings? and PostgreSQL: Difference between text and varchar (character varying)