"use strict";(self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[]).push([[1420],{95788:(e,r,t)=>{t.d(r,{Iu:()=>d,yg:()=>f});var o=t(11504);function n(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function a(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,o)}return t}function c(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?a(Object(t),!0).forEach((function(r){n(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):a(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function i(e,r){if(null==e)return{};var t,o,n=function(e,r){if(null==e)return{};var t,o,n={},a=Object.keys(e);for(o=0;o<a.length;o++)t=a[o],r.indexOf(t)>=0||(n[t]=e[t]);return n}(e,r);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)t=a[o],r.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(n[t]=e[t])}return n}var s=o.createContext({}),l=function(e){var r=o.useContext(s),t=r;return e&&(t="function"==typeof e?e(r):c(c({},r),e)),t},d=function(e){var r=l(e.components);return o.createElement(s.Provider,{value:r},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var r=e.children;return o.createElement(o.Fragment,{},r)}},b=o.forwardRef((function(e,r){var t=e.components,n=e.mdxType,a=e.originalType,s=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),p=l(t),b=n,f=p["".concat(s,".").concat(b)]||p[b]||u[b]||a;return t?o.createElement(f,c(c({ref:r},d),{},{components:t})):o.createElement(f,c({ref:r},d))}));function f(e,r){var t=arguments,n=r&&r.mdxType;if("string"==typeof e||n){var a=t.length,c=new Array(a);c[0]=b;var i={};for(var s in r)hasOwnProperty.call(r,s)&&(i[s]=r[s]);i.originalType=e,i[p]="string"==typeof e?e:n,c[1]=i;for(var l=2;l<a;l++)c[l]=t[l];return o.createElement.apply(null,c)}return o.createElement.apply(null,t)}b.displayName="MDXCreateElement"},99456:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>s,contentTitle:()=>c,default:()=>u,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var o=t(86404),n=(t(11504),t(95788));const a={title:"CockroachDB",hide_title:!0,sidebar_position:16,version:1},c=void 0,i={unversionedId:"databases/cockroachdb",id:"databases/cockroachdb",title:"CockroachDB",description:"CockroachDB",source:"@site/docs/databases/cockroachdb.mdx",sourceDirName:"databases",slug:"/databases/cockroachdb",permalink:"/docs/databases/cockroachdb",draft:!1,editUrl:"https://github.com/apache/superset/edit/master/docs/docs/databases/cockroachdb.mdx",tags:[],version:"current",sidebarPosition:16,frontMatter:{title:"CockroachDB",hide_title:!0,sidebar_position:16,version:1},sidebar:"tutorialSidebar",previous:{title:"ClickHouse",permalink:"/docs/databases/clickhouse"},next:{title:"RisingWave",permalink:"/docs/databases/risingwave"}},s={},l=[{value:"CockroachDB",id:"cockroachdb",level:2}],d={toc:l},p="wrapper";function u(e){let{components:r,...t}=e;return(0,n.yg)(p,(0,o.c)({},d,t,{components:r,mdxType:"MDXLayout"}),(0,n.yg)("h2",{id:"cockroachdb"},"CockroachDB"),(0,n.yg)("p",null,"The recommended connector library for CockroachDB is\n",(0,n.yg)("a",{parentName:"p",href:"https://github.com/cockroachdb/sqlalchemy-cockroachdb"},"sqlalchemy-cockroachdb"),"."),(0,n.yg)("p",null,"The expected connection string is formatted as follows:"),(0,n.yg)("pre",null,(0,n.yg)("code",{parentName:"pre"},"cockroachdb://root@{hostname}:{port}/{database}?sslmode=disable\n")))}u.isMDXComponent=!0}}]);