1-- 2-- INT8 3-- Test int8 64-bit integers. 4-- 5CREATE TABLE INT8_TBL(q1 int8, q2 int8); 6INSERT INTO INT8_TBL VALUES(' 123 ',' 456'); 7INSERT INTO INT8_TBL VALUES('123 ','4567890123456789'); 8INSERT INTO INT8_TBL VALUES('4567890123456789','123'); 9INSERT INTO INT8_TBL VALUES(+4567890123456789,'4567890123456789'); 10INSERT INTO INT8_TBL VALUES('+4567890123456789','-4567890123456789'); 11-- bad inputs 12INSERT INTO INT8_TBL(q1) VALUES (' '); 13ERROR: invalid input syntax for integer: " " 14LINE 1: INSERT INTO INT8_TBL(q1) VALUES (' '); 15 ^ 16INSERT INTO INT8_TBL(q1) VALUES ('xxx'); 17ERROR: invalid input syntax for integer: "xxx" 18LINE 1: INSERT INTO INT8_TBL(q1) VALUES ('xxx'); 19 ^ 20INSERT INTO INT8_TBL(q1) VALUES ('3908203590239580293850293850329485'); 21ERROR: value "3908203590239580293850293850329485" is out of range for type bigint 22LINE 1: INSERT INTO INT8_TBL(q1) VALUES ('39082035902395802938502938... 23 ^ 24INSERT INTO INT8_TBL(q1) VALUES ('-1204982019841029840928340329840934'); 25ERROR: value "-1204982019841029840928340329840934" is out of range for type bigint 26LINE 1: INSERT INTO INT8_TBL(q1) VALUES ('-1204982019841029840928340... 27 ^ 28INSERT INTO INT8_TBL(q1) VALUES ('- 123'); 29ERROR: invalid input syntax for integer: "- 123" 30LINE 1: INSERT INTO INT8_TBL(q1) VALUES ('- 123'); 31 ^ 32INSERT INTO INT8_TBL(q1) VALUES (' 345 5'); 33ERROR: invalid input syntax for integer: " 345 5" 34LINE 1: INSERT INTO INT8_TBL(q1) VALUES (' 345 5'); 35 ^ 36INSERT INTO INT8_TBL(q1) VALUES (''); 37ERROR: invalid input syntax for integer: "" 38LINE 1: INSERT INTO INT8_TBL(q1) VALUES (''); 39 ^ 40SELECT * FROM INT8_TBL; 41 q1 | q2 42------------------+------------------- 43 123 | 456 44 123 | 4567890123456789 45 4567890123456789 | 123 46 4567890123456789 | 4567890123456789 47 4567890123456789 | -4567890123456789 48(5 rows) 49 50-- int8/int8 cmp 51SELECT * FROM INT8_TBL WHERE q2 = 4567890123456789; 52 q1 | q2 53------------------+------------------ 54 123 | 4567890123456789 55 4567890123456789 | 4567890123456789 56(2 rows) 57 58SELECT * FROM INT8_TBL WHERE q2 <> 4567890123456789; 59 q1 | q2 60------------------+------------------- 61 123 | 456 62 4567890123456789 | 123 63 4567890123456789 | -4567890123456789 64(3 rows) 65 66SELECT * FROM INT8_TBL WHERE q2 < 4567890123456789; 67 q1 | q2 68------------------+------------------- 69 123 | 456 70 4567890123456789 | 123 71 4567890123456789 | -4567890123456789 72(3 rows) 73 74SELECT * FROM INT8_TBL WHERE q2 > 4567890123456789; 75 q1 | q2 76----+---- 77(0 rows) 78 79SELECT * FROM INT8_TBL WHERE q2 <= 4567890123456789; 80 q1 | q2 81------------------+------------------- 82 123 | 456 83 123 | 4567890123456789 84 4567890123456789 | 123 85 4567890123456789 | 4567890123456789 86 4567890123456789 | -4567890123456789 87(5 rows) 88 89SELECT * FROM INT8_TBL WHERE q2 >= 4567890123456789; 90 q1 | q2 91------------------+------------------ 92 123 | 4567890123456789 93 4567890123456789 | 4567890123456789 94(2 rows) 95 96-- int8/int4 cmp 97SELECT * FROM INT8_TBL WHERE q2 = 456; 98 q1 | q2 99-----+----- 100 123 | 456 101(1 row) 102 103SELECT * FROM INT8_TBL WHERE q2 <> 456; 104 q1 | q2 105------------------+------------------- 106 123 | 4567890123456789 107 4567890123456789 | 123 108 4567890123456789 | 4567890123456789 109 4567890123456789 | -4567890123456789 110(4 rows) 111 112SELECT * FROM INT8_TBL WHERE q2 < 456; 113 q1 | q2 114------------------+------------------- 115 4567890123456789 | 123 116 4567890123456789 | -4567890123456789 117(2 rows) 118 119SELECT * FROM INT8_TBL WHERE q2 > 456; 120 q1 | q2 121------------------+------------------ 122 123 | 4567890123456789 123 4567890123456789 | 4567890123456789 124(2 rows) 125 126SELECT * FROM INT8_TBL WHERE q2 <= 456; 127 q1 | q2 128------------------+------------------- 129 123 | 456 130 4567890123456789 | 123 131 4567890123456789 | -4567890123456789 132(3 rows) 133 134SELECT * FROM INT8_TBL WHERE q2 >= 456; 135 q1 | q2 136------------------+------------------ 137 123 | 456 138 123 | 4567890123456789 139 4567890123456789 | 4567890123456789 140(3 rows) 141 142-- int4/int8 cmp 143SELECT * FROM INT8_TBL WHERE 123 = q1; 144 q1 | q2 145-----+------------------ 146 123 | 456 147 123 | 4567890123456789 148(2 rows) 149 150SELECT * FROM INT8_TBL WHERE 123 <> q1; 151 q1 | q2 152------------------+------------------- 153 4567890123456789 | 123 154 4567890123456789 | 4567890123456789 155 4567890123456789 | -4567890123456789 156(3 rows) 157 158SELECT * FROM INT8_TBL WHERE 123 < q1; 159 q1 | q2 160------------------+------------------- 161 4567890123456789 | 123 162 4567890123456789 | 4567890123456789 163 4567890123456789 | -4567890123456789 164(3 rows) 165 166SELECT * FROM INT8_TBL WHERE 123 > q1; 167 q1 | q2 168----+---- 169(0 rows) 170 171SELECT * FROM INT8_TBL WHERE 123 <= q1; 172 q1 | q2 173------------------+------------------- 174 123 | 456 175 123 | 4567890123456789 176 4567890123456789 | 123 177 4567890123456789 | 4567890123456789 178 4567890123456789 | -4567890123456789 179(5 rows) 180 181SELECT * FROM INT8_TBL WHERE 123 >= q1; 182 q1 | q2 183-----+------------------ 184 123 | 456 185 123 | 4567890123456789 186(2 rows) 187 188-- int8/int2 cmp 189SELECT * FROM INT8_TBL WHERE q2 = '456'::int2; 190 q1 | q2 191-----+----- 192 123 | 456 193(1 row) 194 195SELECT * FROM INT8_TBL WHERE q2 <> '456'::int2; 196 q1 | q2 197------------------+------------------- 198 123 | 4567890123456789 199 4567890123456789 | 123 200 4567890123456789 | 4567890123456789 201 4567890123456789 | -4567890123456789 202(4 rows) 203 204SELECT * FROM INT8_TBL WHERE q2 < '456'::int2; 205 q1 | q2 206------------------+------------------- 207 4567890123456789 | 123 208 4567890123456789 | -4567890123456789 209(2 rows) 210 211SELECT * FROM INT8_TBL WHERE q2 > '456'::int2; 212 q1 | q2 213------------------+------------------ 214 123 | 4567890123456789 215 4567890123456789 | 4567890123456789 216(2 rows) 217 218SELECT * FROM INT8_TBL WHERE q2 <= '456'::int2; 219 q1 | q2 220------------------+------------------- 221 123 | 456 222 4567890123456789 | 123 223 4567890123456789 | -4567890123456789 224(3 rows) 225 226SELECT * FROM INT8_TBL WHERE q2 >= '456'::int2; 227 q1 | q2 228------------------+------------------ 229 123 | 456 230 123 | 4567890123456789 231 4567890123456789 | 4567890123456789 232(3 rows) 233 234-- int2/int8 cmp 235SELECT * FROM INT8_TBL WHERE '123'::int2 = q1; 236 q1 | q2 237-----+------------------ 238 123 | 456 239 123 | 4567890123456789 240(2 rows) 241 242SELECT * FROM INT8_TBL WHERE '123'::int2 <> q1; 243 q1 | q2 244------------------+------------------- 245 4567890123456789 | 123 246 4567890123456789 | 4567890123456789 247 4567890123456789 | -4567890123456789 248(3 rows) 249 250SELECT * FROM INT8_TBL WHERE '123'::int2 < q1; 251 q1 | q2 252------------------+------------------- 253 4567890123456789 | 123 254 4567890123456789 | 4567890123456789 255 4567890123456789 | -4567890123456789 256(3 rows) 257 258SELECT * FROM INT8_TBL WHERE '123'::int2 > q1; 259 q1 | q2 260----+---- 261(0 rows) 262 263SELECT * FROM INT8_TBL WHERE '123'::int2 <= q1; 264 q1 | q2 265------------------+------------------- 266 123 | 456 267 123 | 4567890123456789 268 4567890123456789 | 123 269 4567890123456789 | 4567890123456789 270 4567890123456789 | -4567890123456789 271(5 rows) 272 273SELECT * FROM INT8_TBL WHERE '123'::int2 >= q1; 274 q1 | q2 275-----+------------------ 276 123 | 456 277 123 | 4567890123456789 278(2 rows) 279 280SELECT '' AS five, q1 AS plus, -q1 AS minus FROM INT8_TBL; 281 five | plus | minus 282------+------------------+------------------- 283 | 123 | -123 284 | 123 | -123 285 | 4567890123456789 | -4567890123456789 286 | 4567890123456789 | -4567890123456789 287 | 4567890123456789 | -4567890123456789 288(5 rows) 289 290SELECT '' AS five, q1, q2, q1 + q2 AS plus FROM INT8_TBL; 291 five | q1 | q2 | plus 292------+------------------+-------------------+------------------ 293 | 123 | 456 | 579 294 | 123 | 4567890123456789 | 4567890123456912 295 | 4567890123456789 | 123 | 4567890123456912 296 | 4567890123456789 | 4567890123456789 | 9135780246913578 297 | 4567890123456789 | -4567890123456789 | 0 298(5 rows) 299 300SELECT '' AS five, q1, q2, q1 - q2 AS minus FROM INT8_TBL; 301 five | q1 | q2 | minus 302------+------------------+-------------------+------------------- 303 | 123 | 456 | -333 304 | 123 | 4567890123456789 | -4567890123456666 305 | 4567890123456789 | 123 | 4567890123456666 306 | 4567890123456789 | 4567890123456789 | 0 307 | 4567890123456789 | -4567890123456789 | 9135780246913578 308(5 rows) 309 310SELECT '' AS three, q1, q2, q1 * q2 AS multiply FROM INT8_TBL; 311ERROR: bigint out of range 312SELECT '' AS three, q1, q2, q1 * q2 AS multiply FROM INT8_TBL 313 WHERE q1 < 1000 or (q2 > 0 and q2 < 1000); 314 three | q1 | q2 | multiply 315-------+------------------+------------------+-------------------- 316 | 123 | 456 | 56088 317 | 123 | 4567890123456789 | 561850485185185047 318 | 4567890123456789 | 123 | 561850485185185047 319(3 rows) 320 321SELECT '' AS five, q1, q2, q1 / q2 AS divide, q1 % q2 AS mod FROM INT8_TBL; 322 five | q1 | q2 | divide | mod 323------+------------------+-------------------+----------------+----- 324 | 123 | 456 | 0 | 123 325 | 123 | 4567890123456789 | 0 | 123 326 | 4567890123456789 | 123 | 37137318076884 | 57 327 | 4567890123456789 | 4567890123456789 | 1 | 0 328 | 4567890123456789 | -4567890123456789 | -1 | 0 329(5 rows) 330 331SELECT '' AS five, q1, float8(q1) FROM INT8_TBL; 332 five | q1 | float8 333------+------------------+----------------------- 334 | 123 | 123 335 | 123 | 123 336 | 4567890123456789 | 4.56789012345679e+015 337 | 4567890123456789 | 4.56789012345679e+015 338 | 4567890123456789 | 4.56789012345679e+015 339(5 rows) 340 341SELECT '' AS five, q2, float8(q2) FROM INT8_TBL; 342 five | q2 | float8 343------+-------------------+------------------------ 344 | 456 | 456 345 | 4567890123456789 | 4.56789012345679e+015 346 | 123 | 123 347 | 4567890123456789 | 4.56789012345679e+015 348 | -4567890123456789 | -4.56789012345679e+015 349(5 rows) 350 351SELECT 37 + q1 AS plus4 FROM INT8_TBL; 352 plus4 353------------------ 354 160 355 160 356 4567890123456826 357 4567890123456826 358 4567890123456826 359(5 rows) 360 361SELECT 37 - q1 AS minus4 FROM INT8_TBL; 362 minus4 363------------------- 364 -86 365 -86 366 -4567890123456752 367 -4567890123456752 368 -4567890123456752 369(5 rows) 370 371SELECT '' AS five, 2 * q1 AS "twice int4" FROM INT8_TBL; 372 five | twice int4 373------+------------------ 374 | 246 375 | 246 376 | 9135780246913578 377 | 9135780246913578 378 | 9135780246913578 379(5 rows) 380 381SELECT '' AS five, q1 * 2 AS "twice int4" FROM INT8_TBL; 382 five | twice int4 383------+------------------ 384 | 246 385 | 246 386 | 9135780246913578 387 | 9135780246913578 388 | 9135780246913578 389(5 rows) 390 391-- int8 op int4 392SELECT q1 + 42::int4 AS "8plus4", q1 - 42::int4 AS "8minus4", q1 * 42::int4 AS "8mul4", q1 / 42::int4 AS "8div4" FROM INT8_TBL; 393 8plus4 | 8minus4 | 8mul4 | 8div4 394------------------+------------------+--------------------+----------------- 395 165 | 81 | 5166 | 2 396 165 | 81 | 5166 | 2 397 4567890123456831 | 4567890123456747 | 191851385185185138 | 108759288653733 398 4567890123456831 | 4567890123456747 | 191851385185185138 | 108759288653733 399 4567890123456831 | 4567890123456747 | 191851385185185138 | 108759288653733 400(5 rows) 401 402-- int4 op int8 403SELECT 246::int4 + q1 AS "4plus8", 246::int4 - q1 AS "4minus8", 246::int4 * q1 AS "4mul8", 246::int4 / q1 AS "4div8" FROM INT8_TBL; 404 4plus8 | 4minus8 | 4mul8 | 4div8 405------------------+-------------------+---------------------+------- 406 369 | 123 | 30258 | 2 407 369 | 123 | 30258 | 2 408 4567890123457035 | -4567890123456543 | 1123700970370370094 | 0 409 4567890123457035 | -4567890123456543 | 1123700970370370094 | 0 410 4567890123457035 | -4567890123456543 | 1123700970370370094 | 0 411(5 rows) 412 413-- int8 op int2 414SELECT q1 + 42::int2 AS "8plus2", q1 - 42::int2 AS "8minus2", q1 * 42::int2 AS "8mul2", q1 / 42::int2 AS "8div2" FROM INT8_TBL; 415 8plus2 | 8minus2 | 8mul2 | 8div2 416------------------+------------------+--------------------+----------------- 417 165 | 81 | 5166 | 2 418 165 | 81 | 5166 | 2 419 4567890123456831 | 4567890123456747 | 191851385185185138 | 108759288653733 420 4567890123456831 | 4567890123456747 | 191851385185185138 | 108759288653733 421 4567890123456831 | 4567890123456747 | 191851385185185138 | 108759288653733 422(5 rows) 423 424-- int2 op int8 425SELECT 246::int2 + q1 AS "2plus8", 246::int2 - q1 AS "2minus8", 246::int2 * q1 AS "2mul8", 246::int2 / q1 AS "2div8" FROM INT8_TBL; 426 2plus8 | 2minus8 | 2mul8 | 2div8 427------------------+-------------------+---------------------+------- 428 369 | 123 | 30258 | 2 429 369 | 123 | 30258 | 2 430 4567890123457035 | -4567890123456543 | 1123700970370370094 | 0 431 4567890123457035 | -4567890123456543 | 1123700970370370094 | 0 432 4567890123457035 | -4567890123456543 | 1123700970370370094 | 0 433(5 rows) 434 435SELECT q2, abs(q2) FROM INT8_TBL; 436 q2 | abs 437-------------------+------------------ 438 456 | 456 439 4567890123456789 | 4567890123456789 440 123 | 123 441 4567890123456789 | 4567890123456789 442 -4567890123456789 | 4567890123456789 443(5 rows) 444 445SELECT min(q1), min(q2) FROM INT8_TBL; 446 min | min 447-----+------------------- 448 123 | -4567890123456789 449(1 row) 450 451SELECT max(q1), max(q2) FROM INT8_TBL; 452 max | max 453------------------+------------------ 454 4567890123456789 | 4567890123456789 455(1 row) 456 457-- TO_CHAR() 458-- 459SELECT '' AS to_char_1, to_char(q1, '9G999G999G999G999G999'), to_char(q2, '9,999,999,999,999,999') 460 FROM INT8_TBL; 461 to_char_1 | to_char | to_char 462-----------+------------------------+------------------------ 463 | 123 | 456 464 | 123 | 4,567,890,123,456,789 465 | 4,567,890,123,456,789 | 123 466 | 4,567,890,123,456,789 | 4,567,890,123,456,789 467 | 4,567,890,123,456,789 | -4,567,890,123,456,789 468(5 rows) 469 470SELECT '' AS to_char_2, to_char(q1, '9G999G999G999G999G999D999G999'), to_char(q2, '9,999,999,999,999,999.999,999') 471 FROM INT8_TBL; 472 to_char_2 | to_char | to_char 473-----------+--------------------------------+-------------------------------- 474 | 123.000,000 | 456.000,000 475 | 123.000,000 | 4,567,890,123,456,789.000,000 476 | 4,567,890,123,456,789.000,000 | 123.000,000 477 | 4,567,890,123,456,789.000,000 | 4,567,890,123,456,789.000,000 478 | 4,567,890,123,456,789.000,000 | -4,567,890,123,456,789.000,000 479(5 rows) 480 481SELECT '' AS to_char_3, to_char( (q1 * -1), '9999999999999999PR'), to_char( (q2 * -1), '9999999999999999.999PR') 482 FROM INT8_TBL; 483 to_char_3 | to_char | to_char 484-----------+--------------------+------------------------ 485 | <123> | <456.000> 486 | <123> | <4567890123456789.000> 487 | <4567890123456789> | <123.000> 488 | <4567890123456789> | <4567890123456789.000> 489 | <4567890123456789> | 4567890123456789.000 490(5 rows) 491 492SELECT '' AS to_char_4, to_char( (q1 * -1), '9999999999999999S'), to_char( (q2 * -1), 'S9999999999999999') 493 FROM INT8_TBL; 494 to_char_4 | to_char | to_char 495-----------+-------------------+------------------- 496 | 123- | -456 497 | 123- | -4567890123456789 498 | 4567890123456789- | -123 499 | 4567890123456789- | -4567890123456789 500 | 4567890123456789- | +4567890123456789 501(5 rows) 502 503SELECT '' AS to_char_5, to_char(q2, 'MI9999999999999999') FROM INT8_TBL; 504 to_char_5 | to_char 505-----------+------------------- 506 | 456 507 | 4567890123456789 508 | 123 509 | 4567890123456789 510 | -4567890123456789 511(5 rows) 512 513SELECT '' AS to_char_6, to_char(q2, 'FMS9999999999999999') FROM INT8_TBL; 514 to_char_6 | to_char 515-----------+------------------- 516 | +456 517 | +4567890123456789 518 | +123 519 | +4567890123456789 520 | -4567890123456789 521(5 rows) 522 523SELECT '' AS to_char_7, to_char(q2, 'FM9999999999999999THPR') FROM INT8_TBL; 524 to_char_7 | to_char 525-----------+-------------------- 526 | 456TH 527 | 4567890123456789TH 528 | 123RD 529 | 4567890123456789TH 530 | <4567890123456789> 531(5 rows) 532 533SELECT '' AS to_char_8, to_char(q2, 'SG9999999999999999th') FROM INT8_TBL; 534 to_char_8 | to_char 535-----------+--------------------- 536 | + 456th 537 | +4567890123456789th 538 | + 123rd 539 | +4567890123456789th 540 | -4567890123456789 541(5 rows) 542 543SELECT '' AS to_char_9, to_char(q2, '0999999999999999') FROM INT8_TBL; 544 to_char_9 | to_char 545-----------+------------------- 546 | 0000000000000456 547 | 4567890123456789 548 | 0000000000000123 549 | 4567890123456789 550 | -4567890123456789 551(5 rows) 552 553SELECT '' AS to_char_10, to_char(q2, 'S0999999999999999') FROM INT8_TBL; 554 to_char_10 | to_char 555------------+------------------- 556 | +0000000000000456 557 | +4567890123456789 558 | +0000000000000123 559 | +4567890123456789 560 | -4567890123456789 561(5 rows) 562 563SELECT '' AS to_char_11, to_char(q2, 'FM0999999999999999') FROM INT8_TBL; 564 to_char_11 | to_char 565------------+------------------- 566 | 0000000000000456 567 | 4567890123456789 568 | 0000000000000123 569 | 4567890123456789 570 | -4567890123456789 571(5 rows) 572 573SELECT '' AS to_char_12, to_char(q2, 'FM9999999999999999.000') FROM INT8_TBL; 574 to_char_12 | to_char 575------------+----------------------- 576 | 456.000 577 | 4567890123456789.000 578 | 123.000 579 | 4567890123456789.000 580 | -4567890123456789.000 581(5 rows) 582 583SELECT '' AS to_char_13, to_char(q2, 'L9999999999999999.000') FROM INT8_TBL; 584 to_char_13 | to_char 585------------+------------------------ 586 | 456.000 587 | 4567890123456789.000 588 | 123.000 589 | 4567890123456789.000 590 | -4567890123456789.000 591(5 rows) 592 593SELECT '' AS to_char_14, to_char(q2, 'FM9999999999999999.999') FROM INT8_TBL; 594 to_char_14 | to_char 595------------+-------------------- 596 | 456. 597 | 4567890123456789. 598 | 123. 599 | 4567890123456789. 600 | -4567890123456789. 601(5 rows) 602 603SELECT '' AS to_char_15, to_char(q2, 'S 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . 9 9 9') FROM INT8_TBL; 604 to_char_15 | to_char 605------------+------------------------------------------- 606 | +4 5 6 . 0 0 0 607 | +4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 . 0 0 0 608 | +1 2 3 . 0 0 0 609 | +4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 . 0 0 0 610 | -4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 . 0 0 0 611(5 rows) 612 613SELECT '' AS to_char_16, to_char(q2, E'99999 "text" 9999 "9999" 999 "\\"text between quote marks\\"" 9999') FROM INT8_TBL; 614 to_char_16 | to_char 615------------+----------------------------------------------------------- 616 | text 9999 "text between quote marks" 456 617 | 45678 text 9012 9999 345 "text between quote marks" 6789 618 | text 9999 "text between quote marks" 123 619 | 45678 text 9012 9999 345 "text between quote marks" 6789 620 | -45678 text 9012 9999 345 "text between quote marks" 6789 621(5 rows) 622 623SELECT '' AS to_char_17, to_char(q2, '999999SG9999999999') FROM INT8_TBL; 624 to_char_17 | to_char 625------------+------------------- 626 | + 456 627 | 456789+0123456789 628 | + 123 629 | 456789+0123456789 630 | 456789-0123456789 631(5 rows) 632 633-- check min/max values and overflow behavior 634select '-9223372036854775808'::int8; 635 int8 636---------------------- 637 -9223372036854775808 638(1 row) 639 640select '-9223372036854775809'::int8; 641ERROR: value "-9223372036854775809" is out of range for type bigint 642LINE 1: select '-9223372036854775809'::int8; 643 ^ 644select '9223372036854775807'::int8; 645 int8 646--------------------- 647 9223372036854775807 648(1 row) 649 650select '9223372036854775808'::int8; 651ERROR: value "9223372036854775808" is out of range for type bigint 652LINE 1: select '9223372036854775808'::int8; 653 ^ 654select -('-9223372036854775807'::int8); 655 ?column? 656--------------------- 657 9223372036854775807 658(1 row) 659 660select -('-9223372036854775808'::int8); 661ERROR: bigint out of range 662select '9223372036854775800'::int8 + '9223372036854775800'::int8; 663ERROR: bigint out of range 664select '-9223372036854775800'::int8 + '-9223372036854775800'::int8; 665ERROR: bigint out of range 666select '9223372036854775800'::int8 - '-9223372036854775800'::int8; 667ERROR: bigint out of range 668select '-9223372036854775800'::int8 - '9223372036854775800'::int8; 669ERROR: bigint out of range 670select '9223372036854775800'::int8 * '9223372036854775800'::int8; 671ERROR: bigint out of range 672select '9223372036854775800'::int8 / '0'::int8; 673ERROR: division by zero 674select '9223372036854775800'::int8 % '0'::int8; 675ERROR: division by zero 676select abs('-9223372036854775808'::int8); 677ERROR: bigint out of range 678select '9223372036854775800'::int8 + '100'::int4; 679ERROR: bigint out of range 680select '-9223372036854775800'::int8 - '100'::int4; 681ERROR: bigint out of range 682select '9223372036854775800'::int8 * '100'::int4; 683ERROR: bigint out of range 684select '100'::int4 + '9223372036854775800'::int8; 685ERROR: bigint out of range 686select '-100'::int4 - '9223372036854775800'::int8; 687ERROR: bigint out of range 688select '100'::int4 * '9223372036854775800'::int8; 689ERROR: bigint out of range 690select '9223372036854775800'::int8 + '100'::int2; 691ERROR: bigint out of range 692select '-9223372036854775800'::int8 - '100'::int2; 693ERROR: bigint out of range 694select '9223372036854775800'::int8 * '100'::int2; 695ERROR: bigint out of range 696select '-9223372036854775808'::int8 / '0'::int2; 697ERROR: division by zero 698select '100'::int2 + '9223372036854775800'::int8; 699ERROR: bigint out of range 700select '-100'::int2 - '9223372036854775800'::int8; 701ERROR: bigint out of range 702select '100'::int2 * '9223372036854775800'::int8; 703ERROR: bigint out of range 704select '100'::int2 / '0'::int8; 705ERROR: division by zero 706SELECT CAST(q1 AS int4) FROM int8_tbl WHERE q2 = 456; 707 q1 708----- 709 123 710(1 row) 711 712SELECT CAST(q1 AS int4) FROM int8_tbl WHERE q2 <> 456; 713ERROR: integer out of range 714SELECT CAST(q1 AS int2) FROM int8_tbl WHERE q2 = 456; 715 q1 716----- 717 123 718(1 row) 719 720SELECT CAST(q1 AS int2) FROM int8_tbl WHERE q2 <> 456; 721ERROR: smallint out of range 722SELECT CAST('42'::int2 AS int8), CAST('-37'::int2 AS int8); 723 int8 | int8 724------+------ 725 42 | -37 726(1 row) 727 728SELECT CAST(q1 AS float4), CAST(q2 AS float8) FROM INT8_TBL; 729 q1 | q2 730--------------+------------------------ 731 123 | 456 732 123 | 4.56789012345679e+015 733 4.56789e+015 | 123 734 4.56789e+015 | 4.56789012345679e+015 735 4.56789e+015 | -4.56789012345679e+015 736(5 rows) 737 738SELECT CAST('36854775807.0'::float4 AS int8); 739 int8 740------------- 741 36854775808 742(1 row) 743 744SELECT CAST('922337203685477580700.0'::float8 AS int8); 745ERROR: bigint out of range 746SELECT CAST(q1 AS oid) FROM INT8_TBL; 747ERROR: OID out of range 748SELECT oid::int8 FROM pg_class WHERE relname = 'pg_class'; 749 oid 750------ 751 1259 752(1 row) 753 754-- bit operations 755SELECT q1, q2, q1 & q2 AS "and", q1 | q2 AS "or", q1 # q2 AS "xor", ~q1 AS "not" FROM INT8_TBL; 756 q1 | q2 | and | or | xor | not 757------------------+-------------------+------------------+------------------+------------------+------------------- 758 123 | 456 | 72 | 507 | 435 | -124 759 123 | 4567890123456789 | 17 | 4567890123456895 | 4567890123456878 | -124 760 4567890123456789 | 123 | 17 | 4567890123456895 | 4567890123456878 | -4567890123456790 761 4567890123456789 | 4567890123456789 | 4567890123456789 | 4567890123456789 | 0 | -4567890123456790 762 4567890123456789 | -4567890123456789 | 1 | -1 | -2 | -4567890123456790 763(5 rows) 764 765SELECT q1, q1 << 2 AS "shl", q1 >> 3 AS "shr" FROM INT8_TBL; 766 q1 | shl | shr 767------------------+-------------------+----------------- 768 123 | 492 | 15 769 123 | 492 | 15 770 4567890123456789 | 18271560493827156 | 570986265432098 771 4567890123456789 | 18271560493827156 | 570986265432098 772 4567890123456789 | 18271560493827156 | 570986265432098 773(5 rows) 774 775-- generate_series 776SELECT * FROM generate_series('+4567890123456789'::int8, '+4567890123456799'::int8); 777 generate_series 778------------------ 779 4567890123456789 780 4567890123456790 781 4567890123456791 782 4567890123456792 783 4567890123456793 784 4567890123456794 785 4567890123456795 786 4567890123456796 787 4567890123456797 788 4567890123456798 789 4567890123456799 790(11 rows) 791 792SELECT * FROM generate_series('+4567890123456789'::int8, '+4567890123456799'::int8, 0); 793ERROR: step size cannot equal zero 794SELECT * FROM generate_series('+4567890123456789'::int8, '+4567890123456799'::int8, 2); 795 generate_series 796------------------ 797 4567890123456789 798 4567890123456791 799 4567890123456793 800 4567890123456795 801 4567890123456797 802 4567890123456799 803(6 rows) 804 805-- corner case 806SELECT (-1::int8<<63)::text; 807 text 808---------------------- 809 -9223372036854775808 810(1 row) 811 812SELECT ((-1::int8<<63)+1)::text; 813 text 814---------------------- 815 -9223372036854775807 816(1 row) 817 818-- check sane handling of INT64_MIN overflow cases 819SELECT (-9223372036854775808)::int8 * (-1)::int8; 820ERROR: bigint out of range 821SELECT (-9223372036854775808)::int8 / (-1)::int8; 822ERROR: bigint out of range 823SELECT (-9223372036854775808)::int8 % (-1)::int8; 824 ?column? 825---------- 826 0 827(1 row) 828 829SELECT (-9223372036854775808)::int8 * (-1)::int4; 830ERROR: bigint out of range 831SELECT (-9223372036854775808)::int8 / (-1)::int4; 832ERROR: bigint out of range 833SELECT (-9223372036854775808)::int8 % (-1)::int4; 834 ?column? 835---------- 836 0 837(1 row) 838 839SELECT (-9223372036854775808)::int8 * (-1)::int2; 840ERROR: bigint out of range 841SELECT (-9223372036854775808)::int8 / (-1)::int2; 842ERROR: bigint out of range 843SELECT (-9223372036854775808)::int8 % (-1)::int2; 844 ?column? 845---------- 846 0 847(1 row) 848 849-- check rounding when casting from float 850SELECT x, x::int8 AS int8_value 851FROM (VALUES (-2.5::float8), 852 (-1.5::float8), 853 (-0.5::float8), 854 (0.0::float8), 855 (0.5::float8), 856 (1.5::float8), 857 (2.5::float8)) t(x); 858 x | int8_value 859------+------------ 860 -2.5 | -2 861 -1.5 | -2 862 -0.5 | 0 863 0 | 0 864 0.5 | 0 865 1.5 | 2 866 2.5 | 2 867(7 rows) 868 869-- check rounding when casting from numeric 870SELECT x, x::int8 AS int8_value 871FROM (VALUES (-2.5::numeric), 872 (-1.5::numeric), 873 (-0.5::numeric), 874 (0.0::numeric), 875 (0.5::numeric), 876 (1.5::numeric), 877 (2.5::numeric)) t(x); 878 x | int8_value 879------+------------ 880 -2.5 | -3 881 -1.5 | -2 882 -0.5 | -1 883 0.0 | 0 884 0.5 | 1 885 1.5 | 2 886 2.5 | 3 887(7 rows) 888 889