mirror of
https://github.com/supabase/supabase.git
synced 2026-10-18 15:49:09 +03:00
rename to include CDC and link to existing guides
This commit is contained in:
16 files changed
+29
-141
No files matched your search
@@ -1,86 +0,0 @@
|
||||
import { useEffect, useReducer, useRef } from 'react'
|
||||
import { ReplicationItems } from '../Navigation/NavigationMenu/NavigationMenu.constants'
|
||||
import { IconPanel } from 'ui-patterns/IconPanel'
|
||||
import { Dialog, DialogContent, DialogHeader, DialogSection, Heading } from 'ui'
|
||||
import AirbyteConfig from './tools/AirbyteConfig.mdx'
|
||||
import StitchConfig from './tools/StitchConfig.mdx'
|
||||
import FivetranConfig from './tools/FivetranConfig.mdx'
|
||||
import EstuaryConfig from './tools/EstuaryConfig.mdx'
|
||||
|
||||
|
||||
const reducer = (_, action: (typeof ReplicationItems)[number] | undefined) => {
|
||||
const url = new URL(document.location.href)
|
||||
if (action) {
|
||||
url.searchParams.set('showSmsProvider', encodeURIComponent(action.name))
|
||||
} else {
|
||||
url.searchParams.delete('showSmsProvider')
|
||||
}
|
||||
window.history.replaceState(null, '', url)
|
||||
return action
|
||||
}
|
||||
|
||||
const AuthSmsProviderConfig = () => {
|
||||
const [selectedProvider, setSelectedProvider] = useReducer(reducer, undefined)
|
||||
|
||||
useEffect(() => {
|
||||
const providerName = new URLSearchParams(document.location.search ?? '').get('showSmsProvider')
|
||||
if (!providerName) return
|
||||
|
||||
const provider = ReplicationItems.find((item) => item.name === decodeURIComponent(providerName))
|
||||
if (provider) setSelectedProvider(provider)
|
||||
}, [])
|
||||
|
||||
const headingRef = useRef<HTMLHeadingElement>(null)
|
||||
|
||||
return (
|
||||
<>
|
||||
<section aria-labelledby="sms-provider-configuration">
|
||||
<h3 className="sr-only" id="sms-provider-configuration">
|
||||
Configuring SMS Providers
|
||||
</h3>
|
||||
<div className="grid grid-cols-6 gap-10 not-prose py-8">
|
||||
{ReplicationItems.map((provider) => (
|
||||
<button
|
||||
key={provider.name}
|
||||
className="col-span-6 xl:col-span-3"
|
||||
onClick={() => setSelectedProvider(provider)}
|
||||
>
|
||||
<IconPanel
|
||||
title={provider.name}
|
||||
icon={provider.icon}
|
||||
/>
|
||||
</button>
|
||||
))}
|
||||
</div>
|
||||
</section>
|
||||
<Dialog
|
||||
open={!!selectedProvider}
|
||||
onOpenChange={(open) => !open && setSelectedProvider(undefined)}
|
||||
>
|
||||
{selectedProvider && (
|
||||
<DialogContent
|
||||
className="!w-[min(90vw,80ch)] !max-w-[min(90vw,80ch)] !max-h-[90dvh] prose overflow-auto"
|
||||
onOpenAutoFocus={(evt) => {
|
||||
evt.preventDefault()
|
||||
headingRef.current?.focus()
|
||||
}}
|
||||
>
|
||||
<DialogHeader className="pb-0 [&>h3]:!m-0 [&>h3>a]:!hidden [&>h3:focus-visible]:outline-none">
|
||||
<Heading tag="h3" ref={headingRef} tabIndex={-1}>
|
||||
{selectedProvider.name}
|
||||
</Heading>
|
||||
</DialogHeader>
|
||||
<DialogSection className="[&>:first-child]:mt-0">
|
||||
{selectedProvider.name.toLowerCase().includes('airbyte') && <AirbyteConfig />}
|
||||
{selectedProvider.name.toLowerCase().includes('estuary') && <EstuaryConfig />}
|
||||
{selectedProvider.name.toLowerCase().includes('fivetran') && <FivetranConfig />}
|
||||
{selectedProvider.name.toLowerCase().includes('stitch') && <StitchConfig />}
|
||||
</DialogSection>
|
||||
</DialogContent>
|
||||
)}
|
||||
</Dialog>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
export default AuthSmsProviderConfig
|
||||
@@ -1,7 +0,0 @@
|
||||
import dynamic from 'next/dynamic'
|
||||
|
||||
const LazyConfig = dynamic(() => import('./DatabaseReplicationConfig'))
|
||||
|
||||
const DatabaseReplicationConfig = () => <LazyConfig />
|
||||
|
||||
export { DatabaseReplicationConfig }
|
||||
@@ -1 +0,0 @@
|
||||
## Prerequisites
|
||||
Whitespace-only changes.
Whitespace-only changes.
Whitespace-only changes.
@@ -499,34 +499,6 @@ export const PhoneLoginsItems = [
|
||||
},
|
||||
]
|
||||
|
||||
export const ReplicationItems = [
|
||||
{
|
||||
name: 'Airbyte',
|
||||
icon: '/docs/img/icons/airbyte-icon',
|
||||
linkDescription: '',
|
||||
url: '/guides/database/replication/airbyte',
|
||||
},
|
||||
{
|
||||
name: 'Estuary',
|
||||
icon: '/docs/img/icons/estuary-icon',
|
||||
url: '/guides/database/replication/estuary',
|
||||
linkDescription: '',
|
||||
},
|
||||
{
|
||||
name: 'Fivetran',
|
||||
icon: '/docs/img/icons/fivetran-icon',
|
||||
url: '/guides/database/replication/fivetran',
|
||||
linkDescription:
|
||||
'',
|
||||
},
|
||||
{
|
||||
name: 'Stitch',
|
||||
icon: '/docs/img/icons/stitch-icon',
|
||||
url: '/guides/database/replication/stitch',
|
||||
linkDescription: '',
|
||||
},
|
||||
]
|
||||
|
||||
export const auth = {
|
||||
icon: 'auth',
|
||||
title: 'Auth',
|
||||
@@ -812,17 +784,17 @@ export const database: NavMenuConstant = {
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'Replication',
|
||||
url: '/guides/database/replication-analytics/overview',
|
||||
name: 'CDC and Logical Replication',
|
||||
url: '/guides/database/replication-cdc/overview',
|
||||
items: [
|
||||
{ name: 'Overview', url: '/guides/database/replication/overview' },
|
||||
{ name: 'Considerations', url: '/guides/database/replication/considerations' },
|
||||
{ name: 'Logical Replication', url: '/guides/database/replication/logical-replication-intro' },
|
||||
{ name: 'Replication with Airbyte', url: '/guides/database/replication/services/etl-airbyte' },
|
||||
{ name: 'Replication with Estuary', url: '/guides/database/replication/services/etl-estuary' },
|
||||
{ name: 'Replication with Fivetran', url: '/guides/database/replication/services/etl-fivetran' },
|
||||
{ name: 'Replication with Materialize', url: '/guides/database/replication/services/etl-materialize' },
|
||||
{ name: 'Replication with Stitch', url: '/guides/database/replication/services/etl-stitch' },
|
||||
{ name: 'Logical Replication', url: '/guides/database/replication-cdc/logical-replication' },
|
||||
{ name: 'FAQs', url: '/guides/database/replication/faq' },
|
||||
{ name: 'CDC with Airbyte', url: '/guides/database/replication-cdc/services/etl-airbyte' },
|
||||
{ name: 'CDC with Artie', url: '/partners/integrations/artie' },
|
||||
{ name: 'CDC with Estuary', url: '/partners/integrations/estuary' },
|
||||
{ name: 'CDC with Fivetran', url: '/guides/database/replication-cdc/services/etl-fivetran' },
|
||||
{ name: 'CDC with Materialize', url: '/guides/database/replication-cdc/services/etl-materialize' },
|
||||
{ name: 'CDC with Stitch', url: '/guides/database/replication-cdc/services/etl-stitch' },
|
||||
],
|
||||
},
|
||||
{
|
||||
|
||||
@@ -79,7 +79,6 @@ import { Extensions } from './Extensions'
|
||||
import { JwtGenerator } from './JwtGenerator'
|
||||
import { Mermaid } from './Mermaid'
|
||||
import { RealtimeLimitsEstimator } from './RealtimeLimitsEstimator'
|
||||
import { DatabaseReplicationConfig } from './DatabaseReplicationConfig'
|
||||
|
||||
const components = {
|
||||
...markdownComponents,
|
||||
@@ -94,7 +93,6 @@ const components = {
|
||||
AuthProviders,
|
||||
AuthRateLimits,
|
||||
AuthSmsProviderConfig,
|
||||
DatabaseReplicationConfig,
|
||||
Button,
|
||||
ButtonCard,
|
||||
CH,
|
||||
|
||||
+19
-1
@@ -5,7 +5,7 @@ description: 'Considerations and FAQs when setting up replication'
|
||||
sidebar_label: 'Considerations'
|
||||
---
|
||||
|
||||
## Why not use my Primary database?
|
||||
# Why not use my Primary database?
|
||||
|
||||
If you want to run analytics on your app, you may wonder why you could not just plug in your database connection string to an analytics tool and go. In some cases, you could, but we do not recommend it. Here's why:
|
||||
|
||||
@@ -21,3 +21,21 @@ Your users want to create or view new content and your analytics queries want to
|
||||
|
||||
If you accidentally drop a table, you might not want to restore your whole project from a backup so you can check these values in your external system before your boss finds out.
|
||||
|
||||
|
||||
# Which connection string should I use?
|
||||
|
||||
Always use the direct connection string for logical replication.
|
||||
|
||||
Connections through a pooler, such as Supavisor, will not work.
|
||||
|
||||
# The tool I am using does not support IPv6
|
||||
|
||||
No worries! Simply enable the [IPv4 addon](/guides/platform/ipv4-address) for your project.
|
||||
|
||||
# Should I use XMIN?
|
||||
|
||||
Xmin is a different form of replication from logical replication and is only really designed to be used if logical replication is not available for your database (i.e. older versions of Postgresql).
|
||||
|
||||
Xmin performs replication by checking the [xmin sytem column](https://www.postgresql.org/docs/current/ddl-system-columns.html) and determining if that row has already been synchronised.
|
||||
|
||||
It does not capture deletion of data and is **not recommended**.
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -1,6 +0,0 @@
|
||||
---
|
||||
id: 'replication-estuary'
|
||||
title: 'Replicating from Supabase to Estuary'
|
||||
description: 'How to set up Logical Replication with Estuary'
|
||||
sidebar_label: 'Replicating to Estuary'
|
||||
---
|
||||
Reference in new issue
Block a user