[{"data":1,"prerenderedAt":870},["ShallowReactive",2],{"blog-\u002Fblog\u002F2025\u002F08\u002Fgetting-started-with-flowfuse-tables":3},{"id":4,"title":5,"body":6,"description":856,"extension":857,"meta":858,"navigation":865,"path":866,"seo":867,"stem":868,"__hash__":869},"blog\u002Fblog\u002F2025\u002F08\u002Fgetting-started-with-flowfuse-tables.md","FlowFuse's New Database: The Easiest Way to Store Industrial IoT Data",{"type":7,"value":8,"toc":847},"minimark",[9,19,24,32,37,40,56,67,70,73,83,91,99,107,111,114,117,122,125,157,165,171,175,178,186,194,200,206,212,215,218,280,289,297,301,308,313,317,395,482,510,525,540,546,549,552,563,567,574,620,635,649,668,672,683,769,781,784,789,793,796,822,830,838,843],[10,11,12,13,18],"p",{},"FlowFuse recently introduced a ",[14,15,17],"a",{"href":16},"\u002Fhandbook\u002Fengineering\u002Freleases\u002F#beta-release","beta release"," built-in database service to their platform, making it easier than ever to store Industrial IoT data. In a typical setup, you would need to provision a database, manage connection strings and credentials, configure nodes, and handle security settings. The goal of this new feature is to simplify or even eliminate those steps entirely. In this article, you will learn how it works and how to get started.",[20,21,23],"h2",{"id":22},"getting-started","Getting Started",[10,25,26,27,31],{},"FlowFuse Tables is available for Enterprise users. If you do not have an Enterprise FlowFuse account and are interested in trying it out, ",[14,28,30],{"href":29},"\u002Fcontact-us\u002F","contact us"," to get started.",[33,34,36],"h3",{"id":35},"step-1-enable-the-database-in-your-project","Step 1: Enable the Database in Your Project",[10,38,39],{},"Once the database feature is active on your account, the first step is to create a database instance for your team to use.",[41,42,43,47,50,53],"ol",{},[44,45,46],"li",{},"Log in to your FlowFuse platform.",[44,48,49],{},"In the navigation menu on the left, select the Tables option.",[44,51,52],{},"On the next screen, you will be prompted to \"Choose which Database you'd like to get started with.\"",[44,54,55],{},"Currently, only Managed PostgreSQL is available. Click on Managed PostgreSQL to proceed.",[10,57,58,64],{},[59,60],"img",{"alt":61,"dataZoomable":62,"src":63},"FlowFuse Tables","","\u002Fblog\u002F2025\u002F08\u002Fimages\u002Ftables.png",[65,66,61],"em",{},[10,68,69],{},"After you make your selection, FlowFuse will begin provisioning your dedicated database in the background. This process typically takes only a few moments.",[10,71,72],{},"Once the provisioning is complete, you will see two tabs in the Tables section:",[74,75,76],"ul",{},[44,77,78,82],{},[79,80,81],"strong",{},"Explorer"," – Allows you to manage your tables through the user interface. You can create tables, add columns, and view stored data.",[10,84,85,89],{},[59,86],{"alt":87,"dataZoomable":62,"src":88},"FlowFuse Tables: Explorer Tab","\u002Fblog\u002F2025\u002F08\u002Fimages\u002Ftables-explorer.png",[65,90,87],{},[74,92,93],{},[44,94,95,98],{},[79,96,97],{},"Credentials"," – Provides the database connection details such as host, port, username, and password. These credentials allow you to access the FlowFuse-managed database from outside FlowFuse as well.",[10,100,101,105],{},[59,102],{"alt":103,"dataZoomable":62,"src":104},"FlowFuse Tables: Credentials Tab","\u002Fblog\u002F2025\u002F08\u002Fimages\u002Ftables-credentials.png",[65,106,103],{},[33,108,110],{"id":109},"step-2-create-your-first-table","Step 2: Create Your First Table",[10,112,113],{},"With your database instance provisioned, you can now create a table to start storing data.",[10,115,116],{},"FlowFuse offers two ways to create a table:",[118,119,121],"h4",{"id":120},"option-1-using-the-table-explorer-ui","Option 1: Using the Table Explorer (UI)",[10,123,124],{},"Navigate to the Explorer tab under the Tables section.",[41,126,127,134,137,140],{},[44,128,129,130,133],{},"Click the ",[79,131,132],{},"+"," button.",[44,135,136],{},"A form will slide in from the right side of the screen.",[44,138,139],{},"In the first input field, enter the name of your table.",[44,141,142,143],{},"Click Add New Column to start defining the structure of your table:\n",[74,144,145,148,151,154],{},[44,146,147],{},"Column Name: Enter the name of the column.",[44,149,150],{},"Type: Select the appropriate data type (e.g., text, bigint, boolean).",[44,152,153],{},"Default: Check this if you want to set a default value for the column and Once checked, enter the default value in the input field that appears next.",[44,155,156],{},"Nullable: Check this if the column can contain empty (null) values.",[10,158,159,163],{},[59,160],{"alt":161,"dataZoomable":62,"src":162},"Interface for creating FlowFuse tables","\u002Fblog\u002F2025\u002F08\u002Fimages\u002Fcreate-table.png",[65,164,161],{},[41,166,168],{"start":167},5,[44,169,170],{},"Click Save once your columns are defined.",[118,172,174],{"id":173},"option-2-using-sql-via-the-query-node","Option 2: Using SQL via the Query Node",[10,176,177],{},"If you prefer writing raw SQL or need more control over your table structure, you can use the Query node in Node-RED.",[41,179,180,183],{},[44,181,182],{},"Go to your FlowFuse instance where you plan to build the flow and use this table.",[44,184,185],{},"Once you're in the Node-RED editor, look at the left-side node palette. You will find the Query node under the FlowFuse category.",[10,187,188,192],{},[59,189],{"alt":190,"dataZoomable":62,"src":191},"FlowFuse Query Node","\u002Fblog\u002F2025\u002F08\u002Fimages\u002Fquery-node.png",[65,193,190],{},[41,195,197],{"start":196},3,[44,198,199],{},"Drag the Query node into your flow.",[201,202,203],"blockquote",{},[10,204,205],{},"The Query node uses standard SQL syntax and is pre-configured to connect to your FlowFuse-managed database automatically — you do not need to manually enter any database credentials when working inside a FlowFuse Node-RED instance.",[41,207,209],{"start":208},4,[44,210,211],{},"Double-click the Query node and write your SQL command in the Query field.",[10,213,214],{},"Note: Table names and column names are case-sensitive in SQL when using certain databases like PostgreSQL. To avoid unexpected errors, it is recommended to wrap them in double quotes in your queries.:",[10,216,217],{},"For example:",[219,220,224],"pre",{"className":221,"code":222,"language":223,"meta":62,"style":62},"language-sql shiki shiki-themes github-light github-dark","CREATE TABLE \"maintenance_tasks\" (\n  \"id\" SERIAL PRIMARY KEY,\n  \"title\" TEXT NOT NULL,\n  \"description\" TEXT,\n  \"assigned_to\" TEXT NOT NULL,\n  \"due_date\" DATE NOT NULL,\n  \"status\" TEXT NOT NULL CHECK (\"status\" IN ('pending', 'in_progress', 'completed')),\n  \"priority\" TEXT NOT NULL CHECK (\"priority\" IN ('low', 'medium', 'high'))\n);\n","sql",[225,226,227,235,241,246,251,256,262,268,274],"code",{"__ignoreMap":62},[228,229,232],"span",{"class":230,"line":231},"line",1,[228,233,234],{},"CREATE TABLE \"maintenance_tasks\" (\n",[228,236,238],{"class":230,"line":237},2,[228,239,240],{},"  \"id\" SERIAL PRIMARY KEY,\n",[228,242,243],{"class":230,"line":196},[228,244,245],{},"  \"title\" TEXT NOT NULL,\n",[228,247,248],{"class":230,"line":208},[228,249,250],{},"  \"description\" TEXT,\n",[228,252,253],{"class":230,"line":167},[228,254,255],{},"  \"assigned_to\" TEXT NOT NULL,\n",[228,257,259],{"class":230,"line":258},6,[228,260,261],{},"  \"due_date\" DATE NOT NULL,\n",[228,263,265],{"class":230,"line":264},7,[228,266,267],{},"  \"status\" TEXT NOT NULL CHECK (\"status\" IN ('pending', 'in_progress', 'completed')),\n",[228,269,271],{"class":230,"line":270},8,[228,272,273],{},"  \"priority\" TEXT NOT NULL CHECK (\"priority\" IN ('low', 'medium', 'high'))\n",[228,275,277],{"class":230,"line":276},9,[228,278,279],{},");\n",[201,281,282],{},[10,283,284,285,288],{},"If you want to send the SQL query dynamically at runtime, you can pass it through ",[225,286,287],{},"msg.query"," instead of hardcoding it in the node configuration.",[41,290,291,294],{"start":167},[44,292,293],{},"Add an Inject node to trigger the query and optionally connect a Debug node to see the output.",[44,295,296],{},"Deploy and click the inject button to create the table.",[33,298,300],{"id":299},"step-3-performing-operations-with-your-table","Step 3: Performing Operations with Your Table",[10,302,303,304,307],{},"Once your table is ready, you can start interacting with it using the ",[79,305,306],{},"Query"," node. This node allows you to run SQL queries directly—whether it is inserting new data, retrieving records, updating rows, or deleting entries. You can perform all standard operations just as you would with the other database nodes. For this demonstration, you will see how to insert data into your table.",[201,309,310],{},[10,311,312],{},"For a complete walkthrough of CRUD operations, you can try out the flow provided at the end of this guide.",[118,314,316],{"id":315},"inserting-a-new-record","Inserting a New Record",[41,318,319,325,332,389],{},[44,320,321,322,324],{},"In your Node-RED editor, drag a ",[79,323,306],{}," node from the FlowFuse category.",[44,326,327,328,331],{},"Add an ",[79,329,330],{},"Inject"," node.",[44,333,334,335,337,338],{},"Drag a Change node and place it between the Inject and ",[79,336,306],{}," nodes. Connect the Inject node to the Change node, and then connect the Change node to the Query node. Double-click the Change node and configure the following properties based on your SQL query requirements. For example:",[74,339,340,349,357,365,373,381],{},[44,341,342,345,346],{},[225,343,344],{},"msg.title"," = ",[225,347,348],{},"\"Check motor status\"",[44,350,351,345,354],{},[225,352,353],{},"msg.description",[225,355,356],{},"\"Routine check of motor and related sensors\"",[44,358,359,345,362],{},[225,360,361],{},"msg.assigned_to",[225,363,364],{},"\"technician_1\"",[44,366,367,345,370],{},[225,368,369],{},"msg.due_date",[225,371,372],{},"\"2025-08-10\"",[44,374,375,345,378],{},[225,376,377],{},"msg.status",[225,379,380],{},"\"pending\"",[44,382,383,345,386],{},[225,384,385],{},"msg.priority",[225,387,388],{},"\"medium\"",[44,390,391,392,394],{},"Double-click the Query node and write the SQL command in the ",[79,393,306],{}," field, For example:",[219,396,400],{"className":397,"code":398,"language":399,"meta":62,"style":62},"language-mustache shiki shiki-themes github-light github-dark","INSERT INTO \"maintenance_tasks\" (\n  \"title\",\n  \"description\",\n  \"assigned_to\",\n  \"due_date\",\n  \"status\",\n  \"priority\"\n) VALUES (\n  {{{msg.title}}},\n  {{{msg.description}}},\n  {{{msg.assigned_to}}},\n  {{{msg.due_date}}},\n  {{{msg.status}}},\n  {{{msg.priority}}}\n);\n","mustache",[225,401,402,407,412,417,422,427,432,437,442,447,453,459,465,471,477],{"__ignoreMap":62},[228,403,404],{"class":230,"line":231},[228,405,406],{},"INSERT INTO \"maintenance_tasks\" (\n",[228,408,409],{"class":230,"line":237},[228,410,411],{},"  \"title\",\n",[228,413,414],{"class":230,"line":196},[228,415,416],{},"  \"description\",\n",[228,418,419],{"class":230,"line":208},[228,420,421],{},"  \"assigned_to\",\n",[228,423,424],{"class":230,"line":167},[228,425,426],{},"  \"due_date\",\n",[228,428,429],{"class":230,"line":258},[228,430,431],{},"  \"status\",\n",[228,433,434],{"class":230,"line":264},[228,435,436],{},"  \"priority\"\n",[228,438,439],{"class":230,"line":270},[228,440,441],{},") VALUES (\n",[228,443,444],{"class":230,"line":276},[228,445,446],{},"  {{{msg.title}}},\n",[228,448,450],{"class":230,"line":449},10,[228,451,452],{},"  {{{msg.description}}},\n",[228,454,456],{"class":230,"line":455},11,[228,457,458],{},"  {{{msg.assigned_to}}},\n",[228,460,462],{"class":230,"line":461},12,[228,463,464],{},"  {{{msg.due_date}}},\n",[228,466,468],{"class":230,"line":467},13,[228,469,470],{},"  {{{msg.status}}},\n",[228,472,474],{"class":230,"line":473},14,[228,475,476],{},"  {{{msg.priority}}}\n",[228,478,480],{"class":230,"line":479},15,[228,481,279],{},[201,483,484,498],{},[10,485,486,487,493,494,497],{},"This node uses the ",[14,488,492],{"href":489,"rel":490},"https:\u002F\u002Fgithub.com\u002Fjanl\u002Fmustache.js",[491],"nofollow","Mustache template system"," to dynamically generate queries based on message properties, using the ",[225,495,496],{},"{{{ msg.property }}}"," syntax.",[10,499,500,501,504,505,509],{},"While convenient for quick testing and prototyping, this method is ",[79,502,503],{},"not recommended for production use",". For better reliability and maintainability, consider using parameterized queries, for that follow ",[14,506,508],{"href":507},"#using-parameters-in-your-queries","Using Parameters in Your Queries",".",[41,511,512,519],{"start":167},[44,513,514,515,518],{},"Optionally, connect a ",[79,516,517],{},"Debug"," node to the output of the Query node to inspect the result.",[44,520,521,522,524],{},"Deploy the flow and click the ",[79,523,330],{}," button to execute the query.",[10,526,527,528,531,532,535,536,539],{},"Upon a successful insert operation, the Query node will output a ",[225,529,530],{},"msg.payload"," containing an empty array, and a ",[225,533,534],{},"msg.pgsql"," object that includes the executed command and a ",[225,537,538],{},"rowCount"," indicating the number of rows affected.",[10,541,542,543,545],{},"For update or delete operations, the behavior is the same. For select operations, the ",[225,544,530],{}," will contain an array of the returned rows.",[33,547,508],{"id":548},"using-parameters-in-your-queries",[10,550,551],{},"As mentioned earlier, placing Mustache-style strings directly into SQL queries is not considered a best practice. Instead, you should use parameterized queries to keep your queries cleaner, more reliable, and easier to maintain while following best practices.",[10,553,554,555,558,559,562],{},"The FlowFuse Query node supports both ",[79,556,557],{},"numbered parameters"," and ",[79,560,561],{},"named parameters",", making your SQL queries more flexible, secure, and reusable.",[118,564,566],{"id":565},"option-1-numbered-parameters","Option 1: Numbered Parameters",[10,568,569,570,573],{},"Numbered parameters let you define placeholders in the SQL string and then pass actual values through ",[225,571,572],{},"msg.params"," as an array.",[41,575,576,581,603,615],{},[44,577,578,579,331],{},"Drag an ",[79,580,330],{},[44,582,583,584,587,588],{},"Drag a ",[79,585,586],{},"Change"," node and set properties based on your SQL command requirements. For example:",[74,589,590,597],{},[44,591,592,593,596],{},"Set ",[225,594,595],{},"msg.payload.priority"," to 'high'",[44,598,592,599,602],{},[225,600,601],{},"msg.payload.status"," to 'pending'",[44,604,605,606,608,609,611,612,509],{},"Add a ",[79,607,586],{}," node and set ",[225,610,572],{}," to ",[225,613,614],{},"[msg.payload.priority, msg.payload.status]",[44,616,605,617,619],{},[79,618,306],{}," node and write an SQL query with numbered parameters. For example:",[219,621,623],{"className":221,"code":622,"language":223,"meta":62,"style":62},"SELECT * FROM \"maintenance_tasks\"\nWHERE \"priority\" = $1 AND \"status\" = $2;\n",[225,624,625,630],{"__ignoreMap":62},[228,626,627],{"class":230,"line":231},[228,628,629],{},"SELECT * FROM \"maintenance_tasks\"\n",[228,631,632],{"class":230,"line":237},[228,633,634],{},"WHERE \"priority\" = $1 AND \"status\" = $2;\n",[41,636,637,643,646],{"start":167},[44,638,639,640,642],{},"Optionally, add a ",[79,641,517],{}," node to view the output.",[44,644,645],{},"Connect the Inject node to the Change node that sets the payload values, then connect it to another Change node that sets the query parameters. Next, connect it to the Query node, and finally connect the Query node to the Debug node.",[44,647,648],{},"Deploy the flow and trigger the Inject node.",[10,650,651,652,558,655,658,659,661,662,558,665,509],{},"This query will retrieve rows where ",[225,653,654],{},"priority",[225,656,657],{},"status"," match the specified values. When you click the Inject node, the actual values from ",[225,660,572],{}," will be passed into the placeholders ",[225,663,664],{},"$1",[225,666,667],{},"$2",[118,669,671],{"id":670},"option-2-named-parameters","Option 2: Named Parameters",[10,673,674,675,678,679,682],{},"Named parameters allow you to reference values by name using a dollar prefix (e.g., ",[225,676,677],{},"$status",") in your SQL query. The actual values are passed using ",[225,680,681],{},"msg.queryParameters"," as an object.",[41,684,685,689,706,733,758,762,764],{},[44,686,578,687,331],{},[79,688,330],{},[44,690,583,691,587,693],{},[79,692,586],{},[74,694,695,701],{},[44,696,592,697,700],{},[225,698,699],{},"msg.payload.id"," to 1",[44,702,592,703,705],{},[225,704,601],{}," to \"in_progress\"",[44,707,708,709,608,711,611,713,716,717],{},"Add another ",[79,710,586],{},[225,712,681],{},[225,714,715],{},"{}",". Then add the following rules:",[74,718,719,726],{},[44,720,592,721,611,724],{},[225,722,723],{},"msg.queryParameters.id",[225,725,699],{},[44,727,592,728,611,731],{},[225,729,730],{},"msg.queryParameters.status",[225,732,601],{},[44,734,605,735,737,738],{},[79,736,306],{}," node and write the SQL query using named parameters. For example:",[219,739,741],{"className":221,"code":740,"language":223,"meta":62,"style":62},"UPDATE \"maintenance_tasks\"\nSET \"status\" = $status\nWHERE \"id\" = $id;\n",[225,742,743,748,753],{"__ignoreMap":62},[228,744,745],{"class":230,"line":231},[228,746,747],{},"UPDATE \"maintenance_tasks\"\n",[228,749,750],{"class":230,"line":237},[228,751,752],{},"SET \"status\" = $status\n",[228,754,755],{"class":230,"line":196},[228,756,757],{},"WHERE \"id\" = $id;\n",[44,759,639,760,642],{},[79,761,517],{},[44,763,645],{},[44,765,521,766,768],{},[79,767,330],{}," button to trigger the update.",[10,770,771,772,774,775,558,777,780],{},"When the flow runs, the values in ",[225,773,681],{}," will replace ",[225,776,677],{},[225,778,779],{},"$id"," in the SQL statement, ensuring that your queries are dynamic, readable, and secure.",[10,782,783],{},"The Node-RED flow provided below demonstrates a complete set of database interactions. It covers table creation, all standard CRUD (Create, Read, Update, Delete) operations, and includes examples of how to use both numbered and named parameters.",[785,786],"render-flow",{":height":787,"flow":788},"300","W3siaWQiOiIxYjMyZDRjODc4YWFlM2JlIiwidHlwZSI6ImRlYnVnIiwieiI6ImZhOWRhM2Y0NWY5NDkwNjciLCJuYW1lIjoiUmVzdWx0IiwiYWN0aXZlIjp0cnVlLCJ0b3NpZGViYXIiOnRydWUsImNvbnNvbGUiOmZhbHNlLCJ0b3N0YXR1cyI6ZmFsc2UsImNvbXBsZXRlIjoicGF5bG9hZCIsInRhcmdldFR5cGUiOiJtc2ciLCJzdGF0dXNWYWwiOiIiLCJzdGF0dXNUeXBlIjoiYXV0byIsIngiOjQ3MCwieSI6NDIwLCJ3aXJlcyI6W119LHsiaWQiOiI1OWU0Yjk5NzIzNWI0ODZmIiwidHlwZSI6Imdyb3VwIiwieiI6ImZhOWRhM2Y0NWY5NDkwNjciLCJuYW1lIjoiIiwic3R5bGUiOnsibGFiZWwiOnRydWV9LCJub2RlcyI6WyI4OTFjN2Y1MGRmOTlkZTQyIiwiNmIwNjMwYzExMDFiZTU5YyIsIjM1ZWRhMGI2YzY5MGU4NWYiLCJkNjM4OTkwYjA0ZTc1ZjczIiwiMGUwYmRjODgxZDRmZjVlOSIsIjhmNjZmMjdmNGZlNWEzYjEiLCI1YzJkYTg1OTc5MmMxNmZhIl0sIngiOjU0LCJ5IjoyMzksInciOjUzMiwiaCI6MjIyfSx7ImlkIjoiODkxYzdmNTBkZjk5ZGU0MiIsInR5cGUiOiJpbmplY3QiLCJ6IjoiZmE5ZGEzZjQ1Zjk0OTA2NyIsImciOiI1OWU0Yjk5NzIzNWI0ODZmIiwibmFtZSI6IiIsInByb3BzIjpbXSwicmVwZWF0IjoiIiwiY3JvbnRhYiI6IiIsIm9uY2UiOmZhbHNlLCJvbmNlRGVsYXkiOjAuMSwidG9waWMiOiIiLCJ4IjoxNTAsInkiOjMyMCwid2lyZXMiOltbIjZiMDYzMGMxMTAxYmU1OWMiXV19LHsiaWQiOiI2YjA2MzBjMTEwMWJlNTljIiwidHlwZSI6InRhYmxlcy1xdWVyeSIsInoiOiJmYTlkYTNmNDVmOTQ5MDY3IiwiZyI6IjU5ZTRiOTk3MjM1YjQ4NmYiLCJuYW1lIjoiQ3JlYXRlIFRhYmxlIiwicXVlcnkiOiJDUkVBVEUgVEFCTEUgXCJtYWludGVuYW5jZV90YXNrc1wiIChcbiAgXCJpZFwiIFNFUklBTCBQUklNQVJZIEtFWSxcbiAgXCJ0aXRsZVwiIFRFWFQgTk9UIE5VTEwsXG4gIFwiZGVzY3JpcHRpb25cIiBURVhULFxuICBcImFzc2lnbmVkX3RvXCIgVEVYVCBOT1QgTlVMTCxcbiAgXCJkdWVfZGF0ZVwiIERBVEUgTk9UIE5VTEwsXG4gIFwic3RhdHVzXCIgVEVYVCBOT1QgTlVMTCBDSEVDSyAoXCJzdGF0dXNcIiBJTiAoJ3BlbmRpbmcnLCAnaW5fcHJvZ3Jlc3MnLCAnY29tcGxldGVkJykpLFxuICBcInByaW9yaXR5XCIgVEVYVCBOT1QgTlVMTCBDSEVDSyAoXCJwcmlvcml0eVwiIElOICgnbG93JywgJ21lZGl1bScsICdoaWdoJykpXG4pO1xuXG4iLCJzcGxpdCI6ZmFsc2UsInJvd3NQZXJNc2ciOjEsIngiOjMxMCwieSI6MzIwLCJ3aXJlcyI6W1siMzVlZGEwYjZjNjkwZTg1ZiJdXX0seyJpZCI6IjM1ZWRhMGI2YzY5MGU4NWYiLCJ0eXBlIjoiZGVidWciLCJ6IjoiZmE5ZGEzZjQ1Zjk0OTA2NyIsImciOiI1OWU0Yjk5NzIzNWI0ODZmIiwibmFtZSI6IlJlc3VsdCIsImFjdGl2ZSI6dHJ1ZSwidG9zaWRlYmFyIjp0cnVlLCJjb25zb2xlIjpmYWxzZSwidG9zdGF0dXMiOmZhbHNlLCJjb21wbGV0ZSI6InBheWxvYWQiLCJ0YXJnZXRUeXBlIjoibXNnIiwic3RhdHVzVmFsIjoiIiwic3RhdHVzVHlwZSI6ImF1dG8iLCJ4Ijo0OTAsInkiOjMyMCwid2lyZXMiOltdfSx7ImlkIjoiZDYzODk5MGIwNGU3NWY3MyIsInR5cGUiOiJjb21tZW50IiwieiI6ImZhOWRhM2Y0NWY5NDkwNjciLCJnIjoiNTllNGI5OTcyMzViNDg2ZiIsIm5hbWUiOiJIYXJkY29kZSBxdWVyeSB3aXRoaW4gbm9kZSIsImluZm8iOiIiLCJ4IjoyMDAsInkiOjI4MCwid2lyZXMiOltdfSx7ImlkIjoiMGUwYmRjODgxZDRmZjVlOSIsInR5cGUiOiJjb21tZW50IiwieiI6ImZhOWRhM2Y0NWY5NDkwNjciLCJnIjoiNTllNGI5OTcyMzViNDg2ZiIsIm5hbWUiOiJEeW5hbWljYWxseSBwYXNzaW5nIHF1ZXJ5IiwiaW5mbyI6IiIsIngiOjE5MCwieSI6MzgwLCJ3aXJlcyI6W119LHsiaWQiOiI4ZjY2ZjI3ZjRmZTVhM2IxIiwidHlwZSI6ImluamVjdCIsInoiOiJmYTlkYTNmNDVmOTQ5MDY3IiwiZyI6IjU5ZTRiOTk3MjM1YjQ4NmYiLCJuYW1lIjoiIiwicHJvcHMiOlt7InAiOiJxdWVyeSIsInYiOiJTRUxFQ1QgKiBGUk9NIFwibWFpbnRlbmFuY2VfdGFza3NcIjsiLCJ2dCI6InN0ciJ9XSwicmVwZWF0IjoiIiwiY3JvbnRhYiI6IiIsIm9uY2UiOmZhbHNlLCJvbmNlRGVsYXkiOjAuMSwidG9waWMiOiIiLCJ4IjoxNTAsInkiOjQyMCwid2lyZXMiOltbIjVjMmRhODU5NzkyYzE2ZmEiXV19LHsiaWQiOiI1YzJkYTg1OTc5MmMxNmZhIiwidHlwZSI6InRhYmxlcy1xdWVyeSIsInoiOiJmYTlkYTNmNDVmOTQ5MDY3IiwiZyI6IjU5ZTRiOTk3MjM1YjQ4NmYiLCJuYW1lIjoiU0VMRUNUIiwicXVlcnkiOiIiLCJzcGxpdCI6ZmFsc2UsInJvd3NQZXJNc2ciOjEsIngiOjMwMCwieSI6NDIwLCJ3aXJlcyI6W1siMWIzMmQ0Yzg3OGFhZTNiZSJdXX0seyJpZCI6Ijk4ZjFjMTM0NTgxZTBjZGMiLCJ0eXBlIjoiZ3JvdXAiLCJ6IjoiZmE5ZGEzZjQ1Zjk0OTA2NyIsIm5hbWUiOiJDUlVEIHdpdGggTmFtZWQgUGFyYW1ldGVycyIsInN0eWxlIjp7ImxhYmVsIjp0cnVlfSwibm9kZXMiOlsiYTcwYjc5ZTJkMTk2MzUxOCIsIjhhNjE3OTc3NDM4YWVkZDEiLCJlNzI1ZmNhMzM4YmZjNzYzIiwiZWY1Y2RlM2IyZTRhZTZlNSIsImFlMDcxY2Y4Mzk0N2MyMDQiLCIyNmRlMzQxMzAxYjUzNzhiIiwiZDFjMjQ1OGRkZWY1MWU4ZiIsImViNDA3MTI4Y2FlYTFjMmYiLCIwYjE5MmM4NWZhYWVlOTk2IiwiOGRiMWMyMjhlMWI0NjRmZCIsIjBhZDE0NDllZTc5MmI2MjMiLCI5YTgxYzg4NDMzNjI2YmY3IiwiNjdhZDNlZGRkNzkyMDU0NyIsIjdiNWUzZTUwMTRiYTYyY2IiLCIwMjhiZDk4YmRjZjU1YThhIiwiZDEyZTQ0YTFlZWZiM2Y2ZSIsIjdiN2MzYjM1ODZjNTdiNmQiLCJhM2Y1OGVkYzI5NzEyYjc1IiwiZTVhNzFiODY1YTgwMjQ4YyIsImQ2Y2JjNTVjNjZhMDJlMzYiLCI2YmFiMGUzNDQxNzhlZDRhIl0sIngiOjU0LCJ5Ijo0NzksInciOjkxMiwiaCI6MjYyfSx7ImlkIjoiYTcwYjc5ZTJkMTk2MzUxOCIsInR5cGUiOiJpbmplY3QiLCJ6IjoiZmE5ZGEzZjQ1Zjk0OTA2NyIsImciOiI5OGYxYzEzNDU4MWUwY2RjIiwibmFtZSI6Ikluc2VydCIsInByb3BzIjpbXSwicmVwZWF0IjoiIiwiY3JvbnRhYiI6IiIsIm9uY2UiOmZhbHNlLCJvbmNlRGVsYXkiOjAuMSwidG9waWMiOiIiLCJ4IjoxNTAsInkiOjU4MCwid2lyZXMiOltbIjdiNWUzZTUwMTRiYTYyY2IiXV19LHsiaWQiOiI4YTYxNzk3NzQzOGFlZGQxIiwidHlwZSI6InRhYmxlcy1xdWVyeSIsInoiOiJmYTlkYTNmNDVmOTQ5MDY3IiwiZyI6Ijk4ZjFjMTM0NTgxZTBjZGMiLCJuYW1lIjoiSW5zZXJ0IiwicXVlcnkiOiJJTlNFUlQgSU5UTyBcIm1haW50ZW5hbmNlX3Rhc2tzXCIgKFxuICBcInRpdGxlXCIsXG4gIFwiZGVzY3JpcHRpb25cIixcbiAgXCJhc3NpZ25lZF90b1wiLFxuICBcImR1ZV9kYXRlXCIsXG4gIFwic3RhdHVzXCIsXG4gIFwicHJpb3JpdHlcIlxuKSBWQUxVRVMgKFxuICAkdGl0bGUsXG4gICRkZXNjcmlwdGlvbixcbiAgJGFzc2lnbmVkX3RvLFxuICAkZHVlX2RhdGUsXG4gICRzdGF0dXMsXG4gICRwcmlvcml0eVxuKTtcbiIsInNwbGl0IjpmYWxzZSwicm93c1Blck1zZyI6MSwieCI6NzMwLCJ5Ijo1ODAsIndpcmVzIjpbWyJlNzI1ZmNhMzM4YmZjNzYzIl1dfSx7ImlkIjoiZTcyNWZjYTMzOGJmYzc2MyIsInR5cGUiOiJkZWJ1ZyIsInoiOiJmYTlkYTNmNDVmOTQ5MDY3IiwiZyI6Ijk4ZjFjMTM0NTgxZTBjZGMiLCJuYW1lIjoiUmVzdWx0IiwiYWN0aXZlIjp0cnVlLCJ0b3NpZGViYXIiOnRydWUsImNvbnNvbGUiOmZhbHNlLCJ0b3N0YXR1cyI6ZmFsc2UsImNvbXBsZXRlIjoicGF5bG9hZCIsInRhcmdldFR5cGUiOiJtc2ciLCJzdGF0dXNWYWwiOiIiLCJzdGF0dXNUeXBlIjoiYXV0byIsIngiOjg3MCwieSI6NTgwLCJ3aXJlcyI6W119LHsiaWQiOiJlZjVjZGUzYjJlNGFlNmU1IiwidHlwZSI6InRhYmxlcy1xdWVyeSIsInoiOiJmYTlkYTNmNDVmOTQ5MDY3IiwiZyI6Ijk4ZjFjMTM0NTgxZTBjZGMiLCJuYW1lIjoiVXBkYXRlIiwicXVlcnkiOiJVUERBVEUgXCJtYWludGVuYW5jZV90YXNrc1wiXG5TRVQgXCJzdGF0dXNcIiA9ICRzdGF0dXNcbldIRVJFIFwiaWRcIiA9ICRpZDtcbiIsInNwbGl0IjpmYWxzZSwicm93c1Blck1zZyI6MSwieCI6NzQwLCJ5Ijo2NjAsIndpcmVzIjpbWyIyNmRlMzQxMzAxYjUzNzhiIl1dfSx7ImlkIjoiYWUwNzFjZjgzOTQ3YzIwNCIsInR5cGUiOiJjaGFuZ2UiLCJ6IjoiZmE5ZGEzZjQ1Zjk0OTA2NyIsImciOiI5OGYxYzEzNDU4MWUwY2RjIiwibmFtZSI6IiIsInJ1bGVzIjpbeyJ0Ijoic2V0IiwicCI6InF1ZXJ5UGFyYW1ldGVycyIsInB0IjoibXNnIiwidG8iOiJ7fSIsInRvdCI6Impzb24ifSx7InQiOiJzZXQiLCJwIjoicXVlcnlQYXJhbWV0ZXJzLmlkIiwicHQiOiJtc2ciLCJ0byI6InBheWxvYWQuaWQiLCJ0b3QiOiJtc2cifSx7InQiOiJzZXQiLCJwIjoicXVlcnlQYXJhbWV0ZXJzLnN0YXR1cyIsInB0IjoibXNnIiwidG8iOiJwYXlsb2FkLnN0YXR1cyIsInRvdCI6Im1zZyJ9XSwiYWN0aW9uIjoiIiwicHJvcGVydHkiOiIiLCJmcm9tIjoiIiwidG8iOiIiLCJyZWciOmZhbHNlLCJ4Ijo1ODAsInkiOjY2MCwid2lyZXMiOltbImVmNWNkZTNiMmU0YWU2ZTUiXV19LHsiaWQiOiIyNmRlMzQxMzAxYjUzNzhiIiwidHlwZSI6ImRlYnVnIiwieiI6ImZhOWRhM2Y0NWY5NDkwNjciLCJnIjoiOThmMWMxMzQ1ODFlMGNkYyIsIm5hbWUiOiJSZXN1bHQiLCJhY3RpdmUiOnRydWUsInRvc2lkZWJhciI6dHJ1ZSwiY29uc29sZSI6ZmFsc2UsInRvc3RhdHVzIjpmYWxzZSwiY29tcGxldGUiOiJwYXlsb2FkIiwidGFyZ2V0VHlwZSI6Im1zZyIsInN0YXR1c1ZhbCI6IiIsInN0YXR1c1R5cGUiOiJhdXRvIiwieCI6ODcwLCJ5Ijo2NjAsIndpcmVzIjpbXX0seyJpZCI6ImQxYzI0NThkZGVmNTFlOGYiLCJ0eXBlIjoiaW5qZWN0IiwieiI6ImZhOWRhM2Y0NWY5NDkwNjciLCJnIjoiOThmMWMxMzQ1ODFlMGNkYyIsIm5hbWUiOiJVcGRhdGUiLCJwcm9wcyI6W10sInJlcGVhdCI6IiIsImNyb250YWIiOiIiLCJvbmNlIjpmYWxzZSwib25jZURlbGF5IjowLjEsInRvcGljIjoiIiwieCI6MTUwLCJ5Ijo2NjAsIndpcmVzIjpbWyIwMjhiZDk4YmRjZjU1YThhIl1dfSx7ImlkIjoiZWI0MDcxMjhjYWVhMWMyZiIsInR5cGUiOiJ0YWJsZXMtcXVlcnkiLCJ6IjoiZmE5ZGEzZjQ1Zjk0OTA2NyIsImciOiI5OGYxYzEzNDU4MWUwY2RjIiwibmFtZSI6IlNFTEVDVCIsInF1ZXJ5IjoiU0VMRUNUICogRlJPTSBcIm1haW50ZW5hbmNlX3Rhc2tzXCJcbldIRVJFIFwicHJpb3JpdHlcIiA9ICRwcmlvcml0eSBBTkQgXCJzdGF0dXNcIiA9ICdwZW5kaW5nJztcbiIsInNwbGl0IjpmYWxzZSwicm93c1Blck1zZyI6MSwieCI6NzQwLCJ5Ijo2MjAsIndpcmVzIjpbWyI4ZGIxYzIyOGUxYjQ2NGZkIl1dfSx7ImlkIjoiMGIxOTJjODVmYWFlZTk5NiIsInR5cGUiOiJjaGFuZ2UiLCJ6IjoiZmE5ZGEzZjQ1Zjk0OTA2NyIsImciOiI5OGYxYzEzNDU4MWUwY2RjIiwibmFtZSI6IiIsInJ1bGVzIjpbeyJ0Ijoic2V0IiwicCI6InF1ZXJ5UGFyYW1ldGVycyIsInB0IjoibXNnIiwidG8iOiJ7fSIsInRvdCI6Impzb24ifSx7InQiOiJzZXQiLCJwIjoicXVlcnlQYXJhbWV0ZXJzLnByaW9yaXR5IiwicHQiOiJtc2ciLCJ0byI6InBheWxvYWQucHJpb3JpdHkiLCJ0b3QiOiJtc2cifV0sImFjdGlvbiI6IiIsInByb3BlcnR5IjoiIiwiZnJvbSI6IiIsInRvIjoiIiwicmVnIjpmYWxzZSwieCI6NTgwLCJ5Ijo2MjAsIndpcmVzIjpbWyJlYjQwNzEyOGNhZWExYzJmIl1dfSx7ImlkIjoiOGRiMWMyMjhlMWI0NjRmZCIsInR5cGUiOiJkZWJ1ZyIsInoiOiJmYTlkYTNmNDVmOTQ5MDY3IiwiZyI6Ijk4ZjFjMTM0NTgxZTBjZGMiLCJuYW1lIjoiUmVzdWx0IiwiYWN0aXZlIjp0cnVlLCJ0b3NpZGViYXIiOnRydWUsImNvbnNvbGUiOmZhbHNlLCJ0b3N0YXR1cyI6ZmFsc2UsImNvbXBsZXRlIjoicGF5bG9hZCIsInRhcmdldFR5cGUiOiJtc2ciLCJzdGF0dXNWYWwiOiIiLCJzdGF0dXNUeXBlIjoiYXV0byIsIngiOjg3MCwieSI6NjIwLCJ3aXJlcyI6W119LHsiaWQiOiIwYWQxNDQ5ZWU3OTJiNjIzIiwidHlwZSI6ImluamVjdCIsInoiOiJmYTlkYTNmNDVmOTQ5MDY3IiwiZyI6Ijk4ZjFjMTM0NTgxZTBjZGMiLCJuYW1lIjoiU0VMRUNUIiwicHJvcHMiOltdLCJyZXBlYXQiOiIiLCJjcm9udGFiIjoiIiwib25jZSI6ZmFsc2UsIm9uY2VEZWxheSI6MC4xLCJ0b3BpYyI6IiIsIngiOjE2MCwieSI6NjIwLCJ3aXJlcyI6W1siOWE4MWM4ODQzMzYyNmJmNyJdXX0seyJpZCI6IjlhODFjODg0MzM2MjZiZjciLCJ0eXBlIjoiY2hhbmdlIiwieiI6ImZhOWRhM2Y0NWY5NDkwNjciLCJnIjoiOThmMWMxMzQ1ODFlMGNkYyIsIm5hbWUiOiIiLCJydWxlcyI6W3sidCI6InNldCIsInAiOiJwYXlsb2FkLnByaW9yaXR5IiwicHQiOiJtc2ciLCJ0byI6ImhpZ2giLCJ0b3QiOiJzdHIifV0sImFjdGlvbiI6IiIsInByb3BlcnR5IjoiIiwiZnJvbSI6IiIsInRvIjoiIiwicmVnIjpmYWxzZSwieCI6MzUwLCJ5Ijo2MjAsIndpcmVzIjpbWyIwYjE5MmM4NWZhYWVlOTk2Il1dfSx7ImlkIjoiNjdhZDNlZGRkNzkyMDU0NyIsInR5cGUiOiJjaGFuZ2UiLCJ6IjoiZmE5ZGEzZjQ1Zjk0OTA2NyIsImciOiI5OGYxYzEzNDU4MWUwY2RjIiwibmFtZSI6IiIsInJ1bGVzIjpbeyJ0Ijoic2V0IiwicCI6InF1ZXJ5UGFyYW1ldGVycyIsInB0IjoibXNnIiwidG8iOiJ7fSIsInRvdCI6Impzb24ifSx7InQiOiJzZXQiLCJwIjoicXVlcnlQYXJhbWV0ZXJzLnRpdGxlIiwicHQiOiJtc2ciLCJ0byI6InBheWxvYWQudGl0bGUiLCJ0b3QiOiJtc2cifSx7InQiOiJzZXQiLCJwIjoicXVlcnlQYXJhbWV0ZXJzLmRlc2NyaXB0aW9uIiwicHQiOiJtc2ciLCJ0byI6InBheWxvYWQuZGVzY3JpcHRpb24iLCJ0b3QiOiJtc2cifSx7InQiOiJzZXQiLCJwIjoicXVlcnlQYXJhbWV0ZXJzLmFzc2lnbmVkX3RvIiwicHQiOiJtc2ciLCJ0byI6InBheWxvYWQuYXNzaWduZWRfdG8iLCJ0b3QiOiJtc2cifSx7InQiOiJzZXQiLCJwIjoicXVlcnlQYXJhbWV0ZXJzLmR1ZV9kYXRlIiwicHQiOiJtc2ciLCJ0byI6InBheWxvYWQuZHVlX2RhdGUiLCJ0b3QiOiJtc2cifSx7InQiOiJzZXQiLCJwIjoicXVlcnlQYXJhbWV0ZXJzLnN0YXR1cyIsInB0IjoibXNnIiwidG8iOiJwYXlsb2FkLnN0YXR1cyIsInRvdCI6Im1zZyJ9LHsidCI6InNldCIsInAiOiJxdWVyeVBhcmFtZXRlcnMucHJpb3JpdHkiLCJwdCI6Im1zZyIsInRvIjoicGF5bG9hZC5wcmlvcml0eSIsInRvdCI6Im1zZyJ9XSwiYWN0aW9uIjoiIiwicHJvcGVydHkiOiIiLCJmcm9tIjoiIiwidG8iOiIiLCJyZWciOmZhbHNlLCJ4Ijo1ODAsInkiOjU4MCwid2lyZXMiOltbIjhhNjE3OTc3NDM4YWVkZDEiXV19LHsiaWQiOiI3YjVlM2U1MDE0YmE2MmNiIiwidHlwZSI6ImNoYW5nZSIsInoiOiJmYTlkYTNmNDVmOTQ5MDY3IiwiZyI6Ijk4ZjFjMTM0NTgxZTBjZGMiLCJuYW1lIjoiIiwicnVsZXMiOlt7InQiOiJzZXQiLCJwIjoicGF5bG9hZC50aXRsZSIsInB0IjoibXNnIiwidG8iOiJSZXBsYWNlIGFpciBjb25kaXRpb25lciBmaWx0ZXIiLCJ0b3QiOiJzdHIifSx7InQiOiJzZXQiLCJwIjoicGF5bG9hZC5kZXNjcmlwdGlvbiIsInB0IjoibXNnIiwidG8iOiJUaGUgYWlyIGZpbHRlciBpbiB0aGUgbWFpbiBvZmZpY2UgbmVlZHMgdG8gYmUgcmVwbGFjZWQgdG8gbWFpbnRhaW4gYWlyIHF1YWxpdHkuIiwidG90Ijoic3RyIn0seyJ0Ijoic2V0IiwicCI6InBheWxvYWQuYXNzaWduZWRfdG8iLCJwdCI6Im1zZyIsInRvIjoiamRvZSIsInRvdCI6InN0ciJ9LHsidCI6InNldCIsInAiOiJwYXlsb2FkLmR1ZV9kYXRlIiwicHQiOiJtc2ciLCJ0byI6IjIwMjUtMDgtMTUiLCJ0b3QiOiJzdHIifSx7InQiOiJzZXQiLCJwIjoicGF5bG9hZC5zdGF0dXMiLCJwdCI6Im1zZyIsInRvIjoicGVuZGluZyIsInRvdCI6InN0ciJ9LHsidCI6InNldCIsInAiOiJwYXlsb2FkLnByaW9yaXR5IiwicHQiOiJtc2ciLCJ0byI6ImhpZ2giLCJ0b3QiOiJzdHIifV0sImFjdGlvbiI6IiIsInByb3BlcnR5IjoiIiwiZnJvbSI6IiIsInRvIjoiIiwicmVnIjpmYWxzZSwieCI6MzIwLCJ5Ijo1ODAsIndpcmVzIjpbWyI2N2FkM2VkZGQ3OTIwNTQ3Il1dfSx7ImlkIjoiMDI4YmQ5OGJkY2Y1NWE4YSIsInR5cGUiOiJjaGFuZ2UiLCJ6IjoiZmE5ZGEzZjQ1Zjk0OTA2NyIsImciOiI5OGYxYzEzNDU4MWUwY2RjIiwibmFtZSI6IiIsInJ1bGVzIjpbeyJ0Ijoic2V0IiwicCI6InBheWxvYWQuaWQiLCJwdCI6Im1zZyIsInRvIjoiMSIsInRvdCI6Im51bSJ9LHsidCI6InNldCIsInAiOiJwYXlsb2FkLnN0YXR1cyIsInB0IjoibXNnIiwidG8iOiJpbl9wcm9ncmVzcyIsInRvdCI6InN0ciJ9XSwiYWN0aW9uIjoiIiwicHJvcGVydHkiOiIiLCJmcm9tIjoiIiwidG8iOiIiLCJyZWciOmZhbHNlLCJ4IjozMjAsInkiOjY2MCwid2lyZXMiOltbImFlMDcxY2Y4Mzk0N2MyMDQiXV19LHsiaWQiOiJkMTJlNDRhMWVlZmIzZjZlIiwidHlwZSI6InRhYmxlcy1xdWVyeSIsInoiOiJmYTlkYTNmNDVmOTQ5MDY3IiwiZyI6Ijk4ZjFjMTM0NTgxZTBjZGMiLCJuYW1lIjoiRGVsZXRlIiwicXVlcnkiOiJERUxFVEUgRlJPTSBcIm1haW50ZW5hbmNlX3Rhc2tzXCJcbldIRVJFIFwiaWRcIiA9ICRpZDtcbiIsInNwbGl0IjpmYWxzZSwicm93c1Blck1zZyI6MSwieCI6NzMwLCJ5Ijo3MDAsIndpcmVzIjpbWyJhM2Y1OGVkYzI5NzEyYjc1Il1dfSx7ImlkIjoiN2I3YzNiMzU4NmM1N2I2ZCIsInR5cGUiOiJjaGFuZ2UiLCJ6IjoiZmE5ZGEzZjQ1Zjk0OTA2NyIsImciOiI5OGYxYzEzNDU4MWUwY2RjIiwibmFtZSI6IiIsInJ1bGVzIjpbeyJ0Ijoic2V0IiwicCI6InF1ZXJ5UGFyYW1ldGVycyIsInB0IjoibXNnIiwidG8iOiJ7fSIsInRvdCI6Impzb24ifSx7InQiOiJzZXQiLCJwIjoicXVlcnlQYXJhbWV0ZXJzLmlkIiwicHQiOiJtc2ciLCJ0byI6InBheWxvYWQuaWQiLCJ0b3QiOiJtc2cifV0sImFjdGlvbiI6IiIsInByb3BlcnR5IjoiIiwiZnJvbSI6IiIsInRvIjoiIiwicmVnIjpmYWxzZSwieCI6NTgwLCJ5Ijo3MDAsIndpcmVzIjpbWyJkMTJlNDRhMWVlZmIzZjZlIl1dfSx7ImlkIjoiYTNmNThlZGMyOTcxMmI3NSIsInR5cGUiOiJkZWJ1ZyIsInoiOiJmYTlkYTNmNDVmOTQ5MDY3IiwiZyI6Ijk4ZjFjMTM0NTgxZTBjZGMiLCJuYW1lIjoiUmVzdWx0IiwiYWN0aXZlIjp0cnVlLCJ0b3NpZGViYXIiOnRydWUsImNvbnNvbGUiOmZhbHNlLCJ0b3N0YXR1cyI6ZmFsc2UsImNvbXBsZXRlIjoicGF5bG9hZCIsInRhcmdldFR5cGUiOiJtc2ciLCJzdGF0dXNWYWwiOiIiLCJzdGF0dXNUeXBlIjoiYXV0byIsIngiOjg3MCwieSI6NzAwLCJ3aXJlcyI6W119LHsiaWQiOiJlNWE3MWI4NjVhODAyNDhjIiwidHlwZSI6ImluamVjdCIsInoiOiJmYTlkYTNmNDVmOTQ5MDY3IiwiZyI6Ijk4ZjFjMTM0NTgxZTBjZGMiLCJuYW1lIjoiREVMRVRFIiwicHJvcHMiOltdLCJyZXBlYXQiOiIiLCJjcm9udGFiIjoiIiwib25jZSI6ZmFsc2UsIm9uY2VEZWxheSI6MC4xLCJ0b3BpYyI6IiIsIngiOjE2MCwieSI6NzAwLCJ3aXJlcyI6W1siZDZjYmM1NWM2NmEwMmUzNiJdXX0seyJpZCI6ImQ2Y2JjNTVjNjZhMDJlMzYiLCJ0eXBlIjoiY2hhbmdlIiwieiI6ImZhOWRhM2Y0NWY5NDkwNjciLCJnIjoiOThmMWMxMzQ1ODFlMGNkYyIsIm5hbWUiOiIiLCJydWxlcyI6W3sidCI6InNldCIsInAiOiJwYXlsb2FkLmlkIiwicHQiOiJtc2ciLCJ0byI6IjIiLCJ0b3QiOiJudW0ifV0sImFjdGlvbiI6IiIsInByb3BlcnR5IjoiIiwiZnJvbSI6IiIsInRvIjoiIiwicmVnIjpmYWxzZSwieCI6MzMwLCJ5Ijo3MDAsIndpcmVzIjpbWyI3YjdjM2IzNTg2YzU3YjZkIl1dfSx7ImlkIjoiNmJhYjBlMzQ0MTc4ZWQ0YSIsInR5cGUiOiJjb21tZW50IiwieiI6ImZhOWRhM2Y0NWY5NDkwNjciLCJnIjoiOThmMWMxMzQ1ODFlMGNkYyIsIm5hbWUiOiJOYW1lZCBQYXJhbWV0ZXJzIiwiaW5mbyI6IiIsIngiOjE3MCwieSI6NTIwLCJ3aXJlcyI6W119LHsiaWQiOiI3ZDU4NGExNzY1MmY2NTQ1IiwidHlwZSI6Imdyb3VwIiwieiI6ImZhOWRhM2Y0NWY5NDkwNjciLCJuYW1lIjoiRXhhbXBsZSBmbG93OiBudW1iZXJlZCBwYXJhbWV0ZXJzIiwic3R5bGUiOnsibGFiZWwiOnRydWV9LCJub2RlcyI6WyJjNjg2OTBkMjU0NmY2NWNmIiwiZWI2NWMxYTQ0YWUyNWRkNyIsImYzOGZlZDkwYzhlMWYyZjYiLCIyYjllNDg2Y2NhMjEyNjM2IiwiZjQ5MmQ2NmFhMjVlMjBhYSJdLCJ4Ijo1NCwieSI6NzU5LCJ3Ijo2NzIsImgiOjEyMn0seyJpZCI6ImM2ODY5MGQyNTQ2ZjY1Y2YiLCJ0eXBlIjoiY29tbWVudCIsInoiOiJmYTlkYTNmNDVmOTQ5MDY3IiwiZyI6IjdkNTg0YTE3NjUyZjY1NDUiLCJuYW1lIjoiTnVtYmVyZWQgUGFyYW1ldGVycyIsImluZm8iOiIiLCJ4IjoxODAsInkiOjgwMCwid2lyZXMiOltdfSx7ImlkIjoiZWI2NWMxYTQ0YWUyNWRkNyIsInR5cGUiOiJmdW5jdGlvbiIsInoiOiJmYTlkYTNmNDVmOTQ5MDY3IiwiZyI6IjdkNTg0YTE3NjUyZjY1NDUiLCJuYW1lIjoiZnVuY3Rpb24gMyIsImZ1bmMiOiJtc2cucGFyYW1zID0ge31cbm1zZy5wYXJhbXMgPSBbbXNnLnBheWxvYWQudGl0bGUsIG1zZy5wYXlsb2FkLmRlc2NyaXB0aW9uLCBtc2cucGF5bG9hZC5hc3NpZ25lZF90bywgbXNnLnBheWxvYWQuZHVlX2RhdGUsIG1zZy5wYXlsb2FkLnN0YXR1cywgbXNnLnBheWxvYWQucHJpb3JpdHldXG5yZXR1cm4gbXNnO1xuIiwib3V0cHV0cyI6MSwidGltZW91dCI6MCwibm9lcnIiOjAsImluaXRpYWxpemUiOiIiLCJmaW5hbGl6ZSI6IiIsImxpYnMiOltdLCJ4IjozMjAsInkiOjg0MCwid2lyZXMiOltbIjJiOWU0ODZjY2EyMTI2MzYiXV19LHsiaWQiOiJmMzhmZWQ5MGM4ZTFmMmY2IiwidHlwZSI6ImluamVjdCIsInoiOiJmYTlkYTNmNDVmOTQ5MDY3IiwiZyI6IjdkNTg0YTE3NjUyZjY1NDUiLCJuYW1lIjoiIiwicHJvcHMiOlt7InAiOiJwYXlsb2FkIn1dLCJyZXBlYXQiOiIiLCJjcm9udGFiIjoiIiwib25jZSI6ZmFsc2UsIm9uY2VEZWxheSI6MC4xLCJ0b3BpYyI6IiIsInBheWxvYWQiOiJ7XCJ0aXRsZVwiOlwiUmVwbGFjZSBhaXIgY29uZGl0aW9uZXIgZmlsdGVyXCIsXCJkZXNjcmlwdGlvblwiOlwiVGhlIGFpciBmaWx0ZXIgaW4gdGhlIG1haW4gb2ZmaWNlIG5lZWRzIHRvIGJlIHJlcGxhY2VkIHRvIG1haW50YWluIGFpciBxdWFsaXR5LlwiLFwiYXNzaWduZWRfdG9cIjpcImpkb2VcIixcImR1ZV9kYXRlXCI6XCIyMDI1LTA4LTE1XCIsXCJzdGF0dXNcIjpcInBlbmRpbmdcIixcInByaW9yaXR5XCI6XCJoaWdoXCJ9IiwicGF5bG9hZFR5cGUiOiJqc29uIiwieCI6MTUwLCJ5Ijo4NDAsIndpcmVzIjpbWyJlYjY1YzFhNDRhZTI1ZGQ3Il1dfSx7ImlkIjoiMmI5ZTQ4NmNjYTIxMjYzNiIsInR5cGUiOiJ0YWJsZXMtcXVlcnkiLCJ6IjoiZmE5ZGEzZjQ1Zjk0OTA2NyIsImciOiI3ZDU4NGExNzY1MmY2NTQ1IiwibmFtZSI6Ikluc2VydCIsInF1ZXJ5IjoiSU5TRVJUIElOVE8gXCJtYWludGVuYW5jZV90YXNrc1wiIChcbiAgXCJ0aXRsZVwiLFxuICBcImRlc2NyaXB0aW9uXCIsXG4gIFwiYXNzaWduZWRfdG9cIixcbiAgXCJkdWVfZGF0ZVwiLFxuICBcInN0YXR1c1wiLFxuICBcInByaW9yaXR5XCJcbikgVkFMVUVTIChcbiAgJDEsICQyLCAkMywgJDQsICQ1LCAkNlxuKTtcbiIsInNwbGl0IjpmYWxzZSwicm93c1Blck1zZyI6MSwieCI6NDkwLCJ5Ijo4NDAsIndpcmVzIjpbWyJmNDkyZDY2YWEyNWUyMGFhIl1dfSx7ImlkIjoiZjQ5MmQ2NmFhMjVlMjBhYSIsInR5cGUiOiJkZWJ1ZyIsInoiOiJmYTlkYTNmNDVmOTQ5MDY3IiwiZyI6IjdkNTg0YTE3NjUyZjY1NDUiLCJuYW1lIjoiUmVzdWx0IiwiYWN0aXZlIjp0cnVlLCJ0b3NpZGViYXIiOnRydWUsImNvbnNvbGUiOmZhbHNlLCJ0b3N0YXR1cyI6ZmFsc2UsImNvbXBsZXRlIjoicGF5bG9hZCIsInRhcmdldFR5cGUiOiJtc2ciLCJzdGF0dXNWYWwiOiIiLCJzdGF0dXNUeXBlIjoiYXV0byIsIngiOjYzMCwieSI6ODQwLCJ3aXJlcyI6W119LHsiaWQiOiI1M2I0OTYzZWYwMDVlYWRmIiwidHlwZSI6Imdsb2JhbC1jb25maWciLCJlbnYiOltdLCJtb2R1bGVzIjp7IkBmbG93ZnVzZS9uci10YWJsZXMtbm9kZXMiOiIwLjEuMCJ9fV0=",[20,790,792],{"id":791},"wrapping-up","Wrapping Up",[10,794,795],{},"You've now learned how to leverage FlowFuse Tables to simplify database management in your Industrial IoT projects. Here's what you've accomplished:",[74,797,798,804,810,816],{},[44,799,800,803],{},[79,801,802],{},"Provisioned"," a managed PostgreSQL database with zero configuration overhead",[44,805,806,809],{},[79,807,808],{},"Created tables"," using both the intuitive UI and flexible SQL approach",[44,811,812,815],{},[79,813,814],{},"Executed queries"," safely using parameterized queries for production-ready flows",[44,817,818,821],{},[79,819,820],{},"Performed CRUD operations"," with the versatile Query node",[10,823,824,825,829],{},"The combination of FlowFuse Tables and the built-in ",[14,826,828],{"href":827},"\u002Fblog\u002F2024\u002F10\u002Fannouncement-mqtt-broker\u002F","MQTT broker"," eliminates the complexity of managing external database and messaging infrastructure, letting you focus on building automation solutions rather than wrestling with DevOps.",[10,831,832,833,837],{},"Ready to see how FlowFuse Tables can accelerate your next industrial project? ",[14,834,836],{"href":835},"\u002Fbook-demo\u002F","Book a demo with our team"," to explore the full platform capabilities.",[10,839,840],{},[65,841,842],{},"Next up: We'll dive into Query node advanced features including backpressure handling and streaming large datasets—essential techniques for high-volume industrial applications.",[844,845,846],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":62,"searchDepth":237,"depth":237,"links":848},[849,855],{"id":22,"depth":237,"text":23,"children":850},[851,852,853,854],{"id":35,"depth":196,"text":36},{"id":109,"depth":196,"text":110},{"id":299,"depth":196,"text":300},{"id":548,"depth":196,"text":508},{"id":791,"depth":237,"text":792},"FlowFuse recently introduced a beta release built-in database service to their platform, making it easier than ever to store Industrial IoT data. In a typical setup, you would need to provision a database, manage connection strings and credentials, configure nodes, and handle security settings. The goal of this new feature is to simplify or even eliminate those steps entirely. In this article, you will learn how it works and how to get started.","md",{"navTitle":5,"excerpt":859},{"type":7,"value":860},[861],[10,862,12,863,18],{},[14,864,17],{"href":16},true,"\u002Fblog\u002F2025\u002F08\u002Fgetting-started-with-flowfuse-tables",{"title":5,"description":856},"blog\u002F2025\u002F08\u002Fgetting-started-with-flowfuse-tables","jyLzyjHMcKdjWEGpoC_amHOnePZgv0Djs4QFEsb_EBM",1780070553190]