- Automatically replicate your data to external data warehouses and analytics platforms in
- real-time. No manual exports, no lag.
-
-
- We are currently in private alpha and slowly
- onboarding new customers to ensure stable data pipelines. Request access below to join the
- waitlist. Read replicas are available now.
-
- {unifiedReplication
- ? 'Replication keeps your data in sync across systems'
- : 'Create your first destination'}
-
+
Replication keeps your data in sync across systems
- {unifiedReplication
- ? 'Deploy read replicas for lower latency and better resource management, or capture database changes to external platforms for real-time data pipelines.'
- : 'Destinations are external platforms where your database changes are automatically sent. Connect to various data warehouses and analytics platforms to enable real-time data pipelines.'}
+ Deploy read replicas for lower latency and better resource management, or capture
+ database changes to external platforms for real-time data pipelines.
-
-
- ) : !isAWSProvider ? (
-
-
-
- Read replicas are only supported for projects provisioned via AWS
-
-
-
- Projects provisioned by other cloud providers currently will not be able to use read
- replicas
-
-
-
-
- ) : isAwsK8s ? (
-
-
-
- Read replicas are not supported for AWS (Revamped) projects
-
-
-
- Projects provisioned by other cloud providers currently will not be able to use read
- replicas
-
-
-
- ) : currentPgVersion < 15 ? (
-
-
-
- Read replicas can only be deployed with projects on Postgres version 15 and above
-
-
- If you'd like to use read replicas, please contact us via support
-
-
-
-
-
- ) : !isMinimallyOnSmallCompute ? (
-
-
-
- Project required to at least be on a Small compute
-
-
-
- This is to ensure that read replicas can keep up with the primary databases'
- activities.
-
-
-
-
-
-
-
- ) : !isWalgEnabled ? (
-
-
-
- {refetchInterval !== false
- ? 'Physical backups are currently being enabled'
- : 'Physical backups are required to deploy replicas'}
-
- {refetchInterval === false && (
-
- Physical backups are used under the hood to spin up read replicas for your project.
-
- )}
-
- {refetchInterval !== false
- ? 'This warning will go away once physical backups have been enabled - check back in a few minutes!'
- : 'Enabling physical backups will take a few minutes, after which you will be able to deploy read replicas.'}
-
- {refetchInterval !== false ? (
-
- You may start deploying read replicas thereafter once this is completed.
-
- ) : (
-
-
-
-
- )}
-
- ) : isProWithSpendCapEnabled ? (
-
-
-
- Spend cap needs to be disabled to deploy replicas
-
-
-
- Launching a replica incurs additional disk size that will exceed the plan's quota.
- Disable the spend cap first to allow overages before launching a replica.
-
-
-
-
-
-
- ) : reachedMaxReplicas ? (
-
-
-
- You can only deploy up to {maxNumberOfReplicas} read replicas at once
-
-
- If you'd like to spin up another read replica, please drop an existing replica first.
-
- {maxNumberOfReplicas === MAX_REPLICAS_BELOW_XL && (
- <>
-
-
- Alternatively, you may deploy up to{' '}
- {MAX_REPLICAS_ABOVE_XL} replicas if
- your project is on an XL compute or higher.
-
-
- New replica will cost an additional{' '}
-
- {formatCurrency(
- estComputeMonthlyCost +
- additionalCostDiskSize +
- Number(additionalCostIOPS) +
- Number(additionalCostThroughput)
- )}
- /month
-
-
-
-
-
-
- Read replicas will match the compute size of your primary database and will
- include 25% more disk size than the primary database to accommodate WAL files.
-
-
- The additional cost for the replica breaks down to:
-
- Read replicas will be on the same compute size as your primary database. Deploying a
- read replica on the{' '}
- {selectedComputeMeta?.name} size incurs
- additional{' '}
-
- {selectedComputeMeta?.price_description}
-
- .
-
- )}
-
-
- Read more about{' '}
-
- billing
- {' '}
- for read replicas.
-
diff --git a/apps/studio/components/interfaces/Settings/Infrastructure/InfrastructureConfiguration/use-show-new-replica.tsx b/apps/studio/components/interfaces/Settings/Infrastructure/InfrastructureConfiguration/use-show-new-replica.tsx
deleted file mode 100644
index 5b89cceade3..00000000000
--- a/apps/studio/components/interfaces/Settings/Infrastructure/InfrastructureConfiguration/use-show-new-replica.tsx
+++ /dev/null
@@ -1,13 +0,0 @@
-import { parseAsBoolean, useQueryState } from 'nuqs'
-
-/**
- * @deprecated Can remove after read replicas is fully moved into database replication page
- */
-export function useShowNewReplicaPanel() {
- const [showNewReplicaPanel, setShowNewReplicaPanel] = useQueryState(
- 'createReplica',
- parseAsBoolean.withDefault(false)
- )
-
- return { showNewReplicaPanel, setShowNewReplicaPanel }
-}
diff --git a/apps/studio/components/interfaces/Settings/Infrastructure/InfrastructureInfo.tsx b/apps/studio/components/interfaces/Settings/Infrastructure/InfrastructureInfo.tsx
index ab0e6de4b79..2fdfcf89b68 100644
--- a/apps/studio/components/interfaces/Settings/Infrastructure/InfrastructureInfo.tsx
+++ b/apps/studio/components/interfaces/Settings/Infrastructure/InfrastructureInfo.tsx
@@ -1,4 +1,4 @@
-import { useFlag, useParams } from 'common'
+import { useParams } from 'common'
import { NoticeBar } from 'components/interfaces/DiskManagement/ui/NoticeBar'
import {
ScaffoldContainer,
@@ -19,15 +19,12 @@ import { Admonition } from 'ui-patterns/admonition'
import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader'
import { ProjectUpgradeAlert } from '../General/Infrastructure/ProjectUpgradeAlert'
-import { InstanceConfiguration } from './InfrastructureConfiguration/InstanceConfiguration'
import { ReadReplicasWarning, ValidationErrorsWarning } from './UpgradeWarnings'
export const InfrastructureInfo = () => {
const { ref } = useParams()
const { data: project } = useSelectedProjectQuery()
- const unifiedReplication = useFlag('unifiedReplication')
-
const { projectAuthAll: authEnabled, projectSettingsDatabaseUpgrades: showDatabaseUpgrades } =
useIsFeatureEnabled(['project_auth:all', 'project_settings:database_upgrades'])
@@ -73,31 +70,26 @@ export const InfrastructureInfo = () => {
return (
<>
- {project?.cloud_provider !== 'FLY' &&
- (unifiedReplication ? (
-
-
-
-
- Go to Replication
-
-
- }
- />
-
-
- ) : (
- <>
-
-
- >
- ))}
+
+ {project?.cloud_provider !== 'FLY' && (
+
+
+
+
+ Go to Replication
+
+
+ }
+ />
+
+
+ )}
diff --git a/apps/studio/components/interfaces/Settings/Infrastructure/UpgradeWarnings.tsx b/apps/studio/components/interfaces/Settings/Infrastructure/UpgradeWarnings.tsx
index 660a5fc060c..7086d365765 100644
--- a/apps/studio/components/interfaces/Settings/Infrastructure/UpgradeWarnings.tsx
+++ b/apps/studio/components/interfaces/Settings/Infrastructure/UpgradeWarnings.tsx
@@ -1,15 +1,14 @@
-import Link from 'next/link'
-
-import { ProjectUpgradeEligibilityValidationError } from '@/data/config/project-upgrade-eligibility-query'
-import { useFlag, useParams } from 'common'
+import { useParams } from 'common'
import { InlineLink } from 'components/ui/InlineLink'
import { DOCS_URL } from 'lib/constants'
+import Link from 'next/link'
import { Button } from 'ui'
import { Admonition } from 'ui-patterns/admonition'
+import { ProjectUpgradeEligibilityValidationError } from '@/data/config/project-upgrade-eligibility-query'
+
export const ReadReplicasWarning = ({ latestPgVersion }: { latestPgVersion: string }) => {
const { ref } = useParams()
- const unifiedReplication = useFlag('unifiedReplication')
return (
- Manage read replicas
-
- ) : undefined
+
}
/>
)
diff --git a/apps/studio/components/ui/DatabaseSelector.tsx b/apps/studio/components/ui/DatabaseSelector.tsx
index cc0166f9d85..23143762b62 100644
--- a/apps/studio/components/ui/DatabaseSelector.tsx
+++ b/apps/studio/components/ui/DatabaseSelector.tsx
@@ -1,12 +1,10 @@
-import { useFlag, useParams } from 'common'
+import { useParams } from 'common'
import { Markdown } from 'components/interfaces/Markdown'
import { REPLICA_STATUS } from 'components/interfaces/Settings/Infrastructure/InfrastructureConfiguration/InstanceConfiguration.constants'
-import { useShowNewReplicaPanel } from 'components/interfaces/Settings/Infrastructure/InfrastructureConfiguration/use-show-new-replica'
import { useReadReplicasQuery } from 'data/read-replicas/replicas-query'
import { formatDatabaseID, formatDatabaseRegion } from 'data/read-replicas/replicas.utils'
import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled'
import { IS_PLATFORM } from 'lib/constants'
-import { timeout } from 'lib/helpers'
import { noop } from 'lodash'
import { Check, ChevronDown, Loader2, Plus } from 'lucide-react'
import Link from 'next/link'
@@ -17,18 +15,18 @@ import { useDatabaseSelectorStateSnapshot } from 'state/database-selector'
import {
Button,
ButtonProps,
+ cn,
+ Command_Shadcn_,
CommandGroup_Shadcn_,
CommandItem_Shadcn_,
CommandList_Shadcn_,
- Command_Shadcn_,
+ Popover_Shadcn_,
PopoverContent_Shadcn_,
PopoverTrigger_Shadcn_,
- Popover_Shadcn_,
ScrollArea,
Tooltip,
TooltipContent,
TooltipTrigger,
- cn,
} from 'ui'
interface DatabaseSelectorProps {
@@ -54,9 +52,7 @@ export const DatabaseSelector = ({
const { ref: projectRef } = useParams()
const [open, setOpen] = useState(false)
const [, setShowConnect] = useQueryState('showConnect', parseAsBoolean.withDefault(false))
- const { setShowNewReplicaPanel } = useShowNewReplicaPanel()
- const unifiedReplication = useFlag('unifiedReplication')
const { infrastructureReadReplicas } = useIsFeatureEnabled(['infrastructure:read_replicas'])
const state = useDatabaseSelectorStateSnapshot()
@@ -74,9 +70,7 @@ export const DatabaseSelector = ({
const selectedAdditionalOption = additionalOptions.find((x) => x.id === selectedDatabaseId)
- const newReplicaURL = unifiedReplication
- ? `/project/${projectRef}/database/replication?type=Read+Replica`
- : `/project/${projectRef}/settings/infrastructure`
+ const newReplicaURL = `/project/${projectRef}/database/replication?type=Read+Replica`
useEffect(() => {
if (_selectedDatabaseId) state.setSelectedDatabaseId(_selectedDatabaseId)
@@ -229,12 +223,6 @@ export const DatabaseSelector = ({
setOpen(false)
// [Joshen] This is used in the Connect UI which is available across all pages
setShowConnect(false)
-
- // [Joshen] Adding a short timeout to compensate for the shift in focus
- // the replica panel from a "portal" based component (e.g dialog, sheet, dropdown, etc)
- // Although I'd prefer if there's a better way to resolve this
- await timeout(50)
- if (!unifiedReplication) setShowNewReplicaPanel(true)
}}
className="w-full flex items-center gap-2"
>
diff --git a/apps/studio/pages/project/[ref]/database/replication/index.tsx b/apps/studio/pages/project/[ref]/database/replication/index.tsx
index 5d5c8699fd3..46c71518f67 100644
--- a/apps/studio/pages/project/[ref]/database/replication/index.tsx
+++ b/apps/studio/pages/project/[ref]/database/replication/index.tsx
@@ -1,11 +1,8 @@
-import { useFlag, useParams } from 'common'
-import { ReplicationComingSoon } from 'components/interfaces/Database/Replication/ComingSoon'
+import { useParams } from 'common'
import { Destinations } from 'components/interfaces/Database/Replication/Destinations'
-import { useIsETLPrivateAlpha } from 'components/interfaces/Database/Replication/useIsETLPrivateAlpha'
import DatabaseLayout from 'components/layouts/DatabaseLayout/DatabaseLayout'
import { DefaultLayout } from 'components/layouts/DefaultLayout'
import { ScaffoldContainer, ScaffoldSection } from 'components/layouts/Scaffold'
-import { FormHeader } from 'components/ui/Forms/FormHeader'
import { UnknownInterface } from 'components/ui/UnknownInterface'
import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled'
import { PipelineRequestStatusProvider } from 'state/replication-pipeline-request-status'
@@ -15,56 +12,36 @@ import { ReplicationDiagram } from '@/components/interfaces/Database/Replication
const DatabaseReplicationPage: NextPageWithLayout = () => {
const { ref } = useParams()
- const enablePgReplicate = useIsETLPrivateAlpha()
const showPgReplicate = useIsFeatureEnabled('database:replication')
- const unifiedReplication = useFlag('unifiedReplication')
if (!showPgReplicate) {
return
}
return (
- <>
- {unifiedReplication || enablePgReplicate ? (
-
-
-
-
-
-
Replication
-
-
- {unifiedReplication
- ? 'Deploy read replicas across multiple regions, or replicate database changes to external data warehouses and analytics platforms'
- : 'Automatically replicate your database changes to external data warehouses and analytics platforms in real-time'}
-
-
-
-
+
+
+
+
+
+
Replication
+
+
+ Deploy read replicas across multiple regions, or replicate database changes to
+ external data warehouses and analytics platforms
+