import { useParams } from 'common' import { useRouter } from 'next/router' import { useState } from 'react' import { Badge, Button, Checkbox_Shadcn_, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, IconCheck, IconChevronDown, Separator, } from 'ui' import { useProjectContext } from 'components/layouts/ProjectLayout/ProjectContext' import ShimmeringLoader from 'components/ui/ShimmeringLoader' import { usePgBouncerStatus } from 'data/config/pgbouncer-enabled-query' import { useProjectSettingsQuery } from 'data/config/project-settings-query' import { usePoolingConfigurationQuery } from 'data/database/pooling-configuration-query' import { useDatabaseSelectorStateSnapshot } from 'state/database-selector' import { useDatabaseSettingsStateSnapshot } from 'state/database-settings' import Link from 'next/link' interface UsePoolerCheckboxInterface { id: string checked: boolean poolingMode: 'transaction' | 'session' | 'statement' onCheckedChange: (value: boolean) => void onSelectPoolingMode: (mode: 'transaction' | 'session') => void } export const UsePoolerCheckbox = ({ id, checked, poolingMode = 'transaction', onCheckedChange, onSelectPoolingMode, }: UsePoolerCheckboxInterface) => { const router = useRouter() const [open, setOpen] = useState(false) const { ref: projectRef } = useParams() const { project } = useProjectContext() const snap = useDatabaseSettingsStateSnapshot() const state = useDatabaseSelectorStateSnapshot() const { data, isLoading, isSuccess } = usePoolingConfigurationQuery({ projectRef }) const { data: settings, isSuccess: isSuccessSettings } = useProjectSettingsQuery({ projectRef }) const { data: pgBouncerStatus } = usePgBouncerStatus({ projectRef: projectRef }) const isDatabaseSettingsPage = router.pathname.endsWith('/settings/database') const readReplicasEnabled = project?.is_read_replicas_enabled const poolingConfiguration = readReplicasEnabled ? data?.find((x) => x.identifier === state.selectedDatabaseId) : data?.find((x) => x.database_type === 'PRIMARY') const resolvesToIpV6 = settings?.project.db_ip_addr_config === 'ipv6' const onSelectOption = (value: 'session' | 'transaction') => { onSelectPoolingMode(value) setOpen(false) } return ( <>
To use transaction mode, change the pool mode in the{' '} {isDatabaseSettingsPage ? ( { const el = document.getElementById('connection-pooler') if (el) { setOpen(false) el.scrollIntoView({ behavior: 'smooth', block: 'center', }) } }} > pooling configuration settings ) : ( pooling configuration settings )}{' '} to use transaction mode first.
You can then connect to session mode on port 5432 and transaction mode on port 6543.