在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
表:
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功能。它是否符合我给出的所有价值
期望:表用户有1条记录,包含3个值
我的尝试:
第二次错误。它显示了3列。这是一个很好的回应。因为我故意弄错了。所以在不久的将来,我会让它成为一个正确的
但是,第3个错误很奇怪。我复制并改变第二种情况是我想要的,让它在'S'上大写。然后准备好的查询有3列,我检查3个值
我有另一个重载函数INSERT INTO所有20列。现在我只想要3.在得到错误后我回到文档。
请参阅文档错误,它表示查询和值具有不同的列数。但这不是我的情况。
问题:
我的查询有3列,我让pgtap
只检查3列,但第3种情况引发我让它检查记录的不等列大小。
有关我的安装的任何信息,请询问。我会尽快向你提供。
答案 0 :(得分: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
。通常,与varchar(n)
相比,使用text
相当不方便。
有关此主题的更多信息,请访问:Any downsides of using data type "text" for storing strings?和PostgreSQL: Difference between text and varchar (character varying)。