Tarantool CE/EE Documentation portal logo
Support
Updated at July 17, 2026   02:08 PM

Module pickle

Index

Below is a list of all pickle functions.

Name

Use

pickle.pack()

Convert Lua variables to binary format

pickle.unpack()

Convert Lua variables back from binary format

pack(format, argument [, argument ...])

To use Tarantool binary protocol primitives from Lua, it's necessary to convert Lua variables to binary format. The pickle.pack() helper function is prototyped after Perl pack.

Format specifiers

b, B

converts Lua scalar value to a 1-byte integer, and stores the integer in the resulting string

s, S

converts Lua scalar value to a 2-byte integer, and stores the integer in the resulting string, low byte first

i, I

converts Lua scalar value to a 4-byte integer, and stores the integer in the resulting string, low byte first

l, L

converts Lua scalar value to an 8-byte integer, and stores the integer in the resulting string, low byte first

n

converts Lua scalar value to a 2-byte integer, and stores the integer in the resulting string, big endian,

N

converts Lua scalar value to a 4-byte integer, and stores the integer in the resulting string, big endian,

q, Q

converts Lua scalar value to an 8-byte integer, and stores the integer in the resulting string, big endian,

f

converts Lua scalar value to a 4-byte float, and stores the float in the resulting string

d

converts Lua scalar value to a 8-byte double, and stores the double in the resulting string

a, A

converts Lua scalar value to a sequence of bytes, and stores the sequence in the resulting string

Parameters:

  • format (string) — string containing format specifiers

  • argument(s) (scalar-value) — scalar values to be formatted

Returns

a binary string containing all arguments, packed according to the format specifiers.

Return type

string

A scalar value can be either a variable or a literal. Remember that large integers should be entered with tonumber64() or LL or ULL suffixes.

Possible errors:

  • Argument count does not match the format. Note: excess values are simply ignored.
  • Expected 8/16/32/64-bit int.
  • Unsupported pack format specifier.

Example:

tarantool> pickle = require('pickle')---...tarantool> box.space.tester:insert{0, 'hello world'}---- [0, 'hello world']...tarantool> box.space.tester:update({0}, {{'=', 2, 'bye world'}})---- [0, 'bye world']...tarantool> box.space.tester:update({0}, {         >   {'=', 2, pickle.pack('iiA', 0, 3, 'hello')}         > })---- [0, "\0\0\0\0\x03\0\0\0hello"]...tarantool> box.space.tester:update({0}, {{'=', 2, 4}})---- [0, 4]...tarantool> box.space.tester:update({0}, {{'+', 2, 4}})---- [0, 8]...tarantool> box.space.tester:update({0}, {{'^', 2, 4}})---- [0, 12]...

unpack(format, binary-string)

Counterpart to pickle.pack(). Warning: if format specifier 'A' is used, it must be the last item.

Parameters:

  • format (string) — none

  • binary-string (string) — none

Returns

A list of strings or numbers.

Return type

table

Possible errors:

  • Too many bytes: unpacked X, total Y. X < Y.
  • Got X bytes (expected: Y+)'. X < Y.
  • Unsupported format specifier.

Example:

tarantool> pickle = require('pickle')---...tarantool> tuple = box.space.tester:replace{0}---...tarantool> string.len(tuple[1])---- 1...tarantool> pickle.unpack('b', tuple[1])---- 48...tarantool> pickle.unpack('bsi', pickle.pack('bsi', 255, 65535, 4294967295))---- 255- 65535- 4294967295...tarantool> pickle.unpack('ls', pickle.pack('ls', tonumber64('18446744073709551615'), 65535))---...tarantool> num, num64, str = pickle.unpack('slA', pickle.pack('slA', 666,         > tonumber64('666666666666666'), 'string'))---...
Example